Karoshi MSX Community
05 de Julio de 2021, 09:31:47 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: 1 2 [3] 4 5
  Imprimir  
Autor Tema: Optimizando los listadillos basic  (Leído 28555 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #30 : 28 de Enero de 2006, 08:09:39 pm »

Imanok: si lo que quieres es usar directamente un LOCATE X,Y:PRINT A$ en SCREEN 2 puedes hacerlo.

Simplemente, estando en SCREEN 2 y con todos los patrones de los 3 bancos ya definidos, usa el comando POKE &hFCAF,1. Con eso conseguirás que el BASIC crea que está en SCREEN 1, con lo que podrás usar LOCATE, PRINT, etc.

Ah, sí?? sólo con eso??... y qué diferéncia hay entre ésto del poke y el modo mixto ese del que tanto se ha hablado??... porque parece que sea lo mismo...

Aparte de eso... has comprobado que lo del OUT que comentaste funciona??... en mi programa no me ha funcionado y luego he hecho pruebas utilizando el código que habías puesto tú y nada... puede ser que no hayas puesto la dirección correcta??

Aprovecho y otra duda...

Ya he visto que si quiero borrar la pantalla, al hacer un CLS me cargo todo... entonces, hay alguna forma de borrar toda la pantalla visible, que sea más rápida que vpokear el patron 0 en todas las posiciones una por una??... es que no veas qué peñazo...

Citar
Pero cuidadín con lo que haces, ¿vale?  Grin

Siiiiiiiiiiiiiiiiiiiiiiiiiiiiii!!!!!  Cheesy
En línea
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #31 : 28 de Enero de 2006, 08:25:52 pm »

Simplemente, estando en SCREEN 2 y con todos los patrones de los 3 bancos ya definidos, usa el comando POKE &hFCAF,1. Con eso conseguirás que el BASIC crea que está en SCREEN 1, con lo que podrás usar LOCATE, PRINT, etc.

no habría que hacer primero SCREEN 1: WIDTH 32 antes que el SCREEN2? Para que así el BASIC escriba en los lugares correspondientes a cada carácter, no?
Yo esto me lo acabo de aprender mirando el listado del Memory, que no lo sabía y mola. Smiley
En línea

sempre fun un valente corredor
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #32 : 28 de Enero de 2006, 08:54:27 pm »

Citar
Ya he visto que si quiero borrar la pantalla, al hacer un CLS me cargo todo... entonces, hay alguna forma de borrar toda la pantalla visible, que sea más rápida que vpokear el patron 0 en todas las posiciones una por una??... es que no veas qué peñazo...

Autorespuesta!
Investigando con eso de los pokes, he visto que lo mejor para borrar la pantalla es:

POKE &hFCAF,1:CLS:POKE &hFCAF,2

Y ale, pantalla borrada en un pis pas!! Grin

En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #33 : 28 de Enero de 2006, 08:59:19 pm »

Vaya, mi gozo en un pozo, no parece que funcione ¿es posible que sólo vaya en algunos equipos?, ¿o será culpa del emulador?.
La idea parecía buena, la tabla de nombres en ambos modos (1 y 2) está en el mismo sitio; así a priori podría haber colado... Huh

Autorespuesta!!

Acabo de descubrir que para que funcione la entrada a screen 2 debe de hacerse desde screen 1, no desde screen 0. O sea, algo así como:

Código:
screen 1:screen 2

...nada más empezar.
En línea

Doom dee doom dee doom
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #34 : 28 de Enero de 2006, 09:01:51 pm »

Citar
no habría que hacer primero SCREEN 1: WIDTH 32 antes que el SCREEN2? Para que así el BASIC escriba en los lugares correspondientes a cada carácter, no?

¡Ajum!, creo que me he repetido, sospecho que era esto a lo que te referías... Roll Eyes

En cualquier caso el truco está genial (pena de tener que cargar los tres bancos)
En línea

Doom dee doom dee doom
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #35 : 28 de Enero de 2006, 10:40:25 pm »

¡Ajum!, creo que me he repetido, sospecho que era esto a lo que te referías... Roll Eyes

En cualquier caso el truco está genial (pena de tener que cargar los tres bancos)
Pozí, eso era. Y si, está genial.
Ya me lo apliqué al algo que estoy intentando hacer y el dibujado de la pantalla se ha disparado, jeje, mola.
Ten en cuenta que haciendo CLS te llena la pantalla con el tile 32 (el caracter del espacio), y para PRINTar los caracteres inferiores hay que poner chr$(0)+chr$(64+n), siendo n el nº de tile. Un poco lioso pero no demasiado.
En línea

sempre fun un valente corredor
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #36 : 28 de Enero de 2006, 11:09:24 pm »

Ah, y también el WIDTH32 es importante para poder acceder bien a toda la pantalla. Y con KEYOFF apuras un pelín más el uso de PRINT. Para la última linea y el último carácter de la penúltima hay que vpokear.
Tal vez esto ya lo controlases, pero bueno, yo tuve que refrescarme la memoria. Smiley
En línea

sempre fun un valente corredor
WYZ
Visitante
« Respuesta #37 : 28 de Enero de 2006, 11:41:53 pm »

defusr=&H77E:a=usr(0)

rellena la pantalla con &H300 tiles &H20 ( o 32) si hay un 1 en &HFCAF y con tres bancos de tiles incrementando de 1 en 1 si hay un 2 pero no te limpia la definicion de caracteres.

Ah, se me olvidaba. Hay que poner Keyoff
« Última modificación: 28 de Enero de 2006, 11:50:31 pm por WYZ » En línea
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #38 : 30 de Enero de 2006, 10:21:56 am »

Ten en cuenta que haciendo CLS te llena la pantalla con el tile 32 (el caracter del espacio), y para PRINTar los caracteres inferiores hay que poner chr$(0)+chr$(64+n), siendo n el nº de tile. Un poco lioso pero no demasiado.

Te refieres a que para printar los caracteres del 0 al 31 hay que hacer chr$(0)+chr$(64+n) ??... si es así, lo he probado y no funciona... alguna otra solución para printar esos caracteres?? (usando PRINT, no vpoke).
En línea
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #39 : 30 de Enero de 2006, 02:36:02 pm »

Citar
Te refieres a que para printar los caracteres del 0 al 31 hay que hacer chr$(0)+chr$(64+n) ??... si es así, lo he probado y no funciona... alguna otra solución para printar esos caracteres?? (usando PRINT, no vpoke).
Opss, perdón, es chr$(1)+chr$(64+n). Prueba ahora.
En línea

sempre fun un valente corredor
SapphiRe
Visitante
« Respuesta #40 : 30 de Enero de 2006, 02:52:49 pm »

Simplemente, estando en SCREEN 2 y con todos los patrones de los 3 bancos ya definidos, usa el comando POKE &hFCAF,1. Con eso conseguirás que el BASIC crea que está en SCREEN 1, con lo que podrás usar LOCATE, PRINT, etc.

Para volver a convencer al MSX de que está en SCREEN 2, pokea la misma dirección con el valor 2. Así podrás volver a usar CIRCLE, LINE, PAINT, etc.

Esto demuestra, una vez más, lo iguales que son SCREEN 1 y 2 en el MSX, lo cual nos da muchísimo juego a la hora de hacer efectos interesantes con los gráficos Cheesy

En línea
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #41 : 30 de Enero de 2006, 04:47:19 pm »

Opss, perdón, es chr$(1)+chr$(64+n). Prueba ahora.

Ahora sí!  Wink
En línea
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #42 : 31 de Enero de 2006, 08:46:01 am »

Por cierto, he descubierto otra forma de poder escribir los patrones 0-31 con un PRINT, haciendo lo siguiente:

-Inicializamos como habéis comentado SCREEN 1:WIDTH32:SCREEN2:cargo_set:POKE &hFCAF,1
-A partir de aquí, mostramos por pantalla (con vpokes) los patrones que queramos de entre los 32 primeros.
-Hacemos un CTRL+STOP y nos situamos sobre la línea de patrones que acabamos de dibujar, insertándole delante un número de línea y un PRINT", para incluirlo en nuestro programa y ya está (luego ya coloco esa línea donde me convenga).

Lo que he hecho ha sido dibujar toda la pantalla con vpokes, hacer CTRL+STOP y crear 23 líneas de programa con los patrones de cada línea. Como ya habéis comentado, el último patrón de la penúltima línea y la última línea completa, hay que hacerlos con vpoke... pero vamos, la diferencia de velocidad es grandísima (entre dibujar toda la pantalla con vpoke's o con print's, quiero decir).
« Última modificación: 31 de Enero de 2006, 08:52:35 am por Imanok » En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #43 : 31 de Enero de 2006, 11:32:53 am »

Citar
Hacemos un CTRL+STOP y nos situamos sobre la línea de patrones que acabamos de dibujar, insertándole delante un número de línea y un PRINT", para incluirlo en nuestro programa y ya está

Esos carácteres creo que se podían obtener desde el teclado usando la tecla GRAPH, ¿no?. EL problema debe de ser, como habeis comentado, obtenerlos a partir de CHR$ Huh
En línea

Doom dee doom dee doom
Imanok
Karoshi Hero
*****
Mensajes: 626


« Respuesta #44 : 01 de Febrero de 2006, 08:59:09 am »

Esos carácteres creo que se podían obtener desde el teclado usando la tecla GRAPH, ¿no?. EL problema debe de ser, como habeis comentado, obtenerlos a partir de CHR$ Huh

Yo pensaba que la primera fila de la tabla de patrones no se podía pintar con GRAPH... pero va a ser que sí. Torpedo que es uno... Tongue
« Última modificación: 01 de Febrero de 2006, 09:00:47 am por Imanok » En línea
Páginas: 1 2 [3] 4 5
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!