Título: Modificar color caracteres en Screen 1 Publicado por: Fenris78 en 16 de Febrero de 2013, 02:50:52 am Saludos a todos.
Me llamo Jorge, de Sevilla. Cuando eramos crios teniamos un Dynadata en casa y hace algun tiempo he retomado la aficion con un MSX2. Hago juegos para PC desde hace algun tiempo, pero en MSX estoy muy pegado, la verdad. El tema es que me he puesto a aprender MSX Basic y he comenzado a crear un minijuego. Por el momento me va mas o menos bien: tengo redefinidos algunos caracteres, creadas las rutinas de colision, movimiento... el tema es que ahora me gustaria modificar los colores de los caracteres que he redefinido para añadirle un poco de vida, pero no tengo claro como se hace. Entiendo que en Screen 1 solo puedo poner un color por cada cierta cantidad de caracteres y que debo de modificar la VRAM... pero no se ni en que direccion de la memoria debo modificar los datos ni que valor debo introducir. ¿Me podeis dar alguna orientacion? Título: Re: Modificar color caracteres en Screen 1 Publicado por: j4mk3 en 16 de Febrero de 2013, 05:55:03 am Hola Bienvenido "de nuevo" al mundillo MSX,
Pues así rapido te comento que en screen 1 es 1 color cada 8 caracteres...bueno 2 colores, uno para los Ceros y otro para los Unos de los patrones. Y para datos tecnicos, direcciones y detalles así para tener como referencia, lo mejor es la web de Portar MSX. Es un solo HTML. si te lo guardas puedes hacer como yo, que me acompaña a todas partes :) http://nocash.emubase.de/portar.htm Sacado de portar: Citar SCREEN 1 - 32x24 coloured text mode 0000-07FF BG Tiles 1800-1AFF BG Map 1B00-1B7F OBJ Attributes 2000-201F BG Colors 3800-3FFF OBJ Tiles The BG Colors array defines 32 colors (each 4 bit background, and 4 bit foreground, as in VDP register 7). The colors are assigned to the BG Tiles as follows: Tiles 00..07 share the first color, tiles 08..0F share the second color, etc, and tiles F8..FF share the last color. Título: Re: Modificar color caracteres en Screen 1 Publicado por: pitpan en 16 de Febrero de 2013, 09:38:27 am O dicho más fácilmente: en SCREEN 1 sólo puedes poner dos colores, uno de fondo y uno de tinta, que comparten siempre 8 caracteres consecutivos.
Por ejemplo, si haces VPOKE 8204,15*16+12 Conseguirás que los caracteres ASCII 96 a 103 sean verde oscuro sobre fondo blanco. Muy fácil y un rápido. Lo único es que probablemente tendrás que reordenar tus caracteres para que al compartir colores no te den problemas. Practica con esto y cuando te sientas con fuerza te podemos explicar cómo definir dos colores por cada línea horizontal (8x1 píxels) de cada carácter... También se puede hacer funcionar desde BASIC y te permite ganar mucho colorido. Título: Re: Modificar color caracteres en Screen 1 Publicado por: Fenris78 en 16 de Febrero de 2013, 03:24:10 pm ¡Muchas gracias a ambos!
Creo que ya lo voy pillando. ¿Estoy entendiendolo bien? El ejemplo: Código: VPOKE 8204,15*16+12 2000 [HEX] -> 8192 [DEC] 1 color por cada 8 Bits. Si quiero llegar a la "tira" de 96-103: 96/8 = 12 8192 + 12 = 8204 Hasta aqui perfecto. Siguiendo vuestras instrucciones ya he conseguido cambiar los colores que necesitaba. :) Lo unico que aun no termino de entender es el Código: 15*16+12 del final. El 15 y el 12 son los colores blanco y verde, pero ¿porque se realizan esas operaciones? me come la curiosidad.Por cierto, ya me he guardado el HTML. ¡Muy util! Título: Re: Modificar color caracteres en Screen 1 Publicado por: MsxKun en 16 de Febrero de 2013, 03:58:46 pm Porque ambos colores se definen con un unico byte, usando cada color medio byte, o un nibble. Asi 15 y 12 , seria $F y $C, que al representarse en un solo byte se colocan juntos y queda $FC. Pero claro, de esta forma el valor $F realmente pasa a valer 16*$F o 16*15. Tanto 16*15+12 como $FC equivalen a 252. Cuando te acostumbras al hexadecimal todo es mas facil. Por este tipo de cosas, precisamente.
Título: Re: Modificar color caracteres en Screen 1 Publicado por: Fenris78 en 19 de Febrero de 2013, 12:20:09 am ¡Comprendido y asimilado!
Gracias por las explicaciones. Me lo voy a apuntar todo porque para esto hacen falta apuntes. :) |