Karoshi MSX Community
05 de Julio de 2021, 09:31:35 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 #15 : 27 de Enero de 2006, 08:50:55 am »

Pues no sé muy bien a lo que te refieres, pero podría ser algo así:

10 D=6144+32*8+15:P=45:GOSUB1000
...
...
1000 VPOKED,P:FORI=0TO9:P=P+1:OUT&h98,P:NEXT:RETURN

Si no te he entendido mal, claro.  Wink

No va por ahí la cosa, ya que tu recorres los 10 patrones de la tabla con un FOR. A ver si me explico mejor:

-Imaginemos que tengo un set de patrones completo, con las fuentes de los carácteres en sus lugares correspondientes y tal.
-Imaginemos que yo quiero mostrar por pantalla "ABCDEFGHIJ" (o sea, 10 patrones consecutivos de la tabla) en la posición 6144 de la VRAM (en la posición '0' de la pantalla que vemos, si no lo he puesto mal).
-Se puede hacer lo anterior sin utilizar un bucle, diciéndole de alguna forma "cópiame 10 patrones de la tabla (de la 'A' a la 'J') a partir de la posición 6144 de la VRAM (de la 6144 a la 6153)"??

No se si me explico...
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #16 : 27 de Enero de 2006, 10:03:38 am »

Si entiendo que hablas de SC2, entonces o mucho me equivoco o en BASIC no se puede. Si fuese SC1, entonces tu instrucción sería PRINT; pero claro, no van por ahí los tiros Sad
En línea

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


« Respuesta #17 : 27 de Enero de 2006, 12:29:18 pm »

Claro, claro... hablo de SR2.

Lo que quiero sería algo que funcionalmente fuese como ésto (haciendo un símil con el COPY en SR5 o SR8):

COPY (pattern_n)-(pattern_n+9),pattern_table TO (X,Y),main_screen
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #18 : 27 de Enero de 2006, 01:59:05 pm »

Pues lo dicho, pa mi que no... Sad
En línea

Doom dee doom dee doom
WYZ
Visitante
« Respuesta #19 : 27 de Enero de 2006, 04:32:16 pm »

Se pueden utilizar las rutinas de la BIOS para esto que pides Imanok, pero algunas no son directamente accesibles  sino que hay que introducir los parámetros previos en los registros del z80. En el ejemplo que te pongo, para pocos caracteres no se si se gana en velocidad, pero si cuando hay que mover grandes bloques. ( hace un scroll deun circulo simplemente copiando a ram y volcando a vram variando una posicion en la tabla de tiles. A ver si os sugiere algun otro uso de la BIOS)

Código:
5 COLOR 15,4,1
10 SCREEN 2
20 DEFINT A-L
21 CIRCLE (216,32),31
30 H=&H18:L=0:D=&HD1:E=0:B=&H1:C=0:FBIOS=&H59:GOSUB 50
32 H=&HD1:L=0:D=&H18:E=0:B=&H:C=&HFF:FBIOS=&H5C
34 L=L+1:C=C-1
35 GOSUB 50
36 IF C>0 THEN GOTO 34
40 GOTO 40
50 DIR=&HD000
60 POKE DIR,&H1
70 POKE DIR+1,C
80 POKE DIR+2,B
90 POKE DIR+3,&H11
100 POKE DIR+4,E
110 POKE DIR+5,D
120 POKE DIR+6,&H21
130 POKE DIR+7,L
140 POKE DIR+8,H
150 POKE DIR+9,&H3E
160 POKE DIR+10,A
170 POKE DIR+11,&HCD
180 POKE DIR+12,FBIOS
190 POKE DIR+13,&H
191 POKE DIR+14,&HC9
200 DEFUSR=DIR:A=USR(0)
210 RETURN

Solo se mueve la parte superior de la pantalla, pero podría hacerse sin problemas de la pantalla completa. Seguro que lo puedes mejorar Cheesy
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #20 : 27 de Enero de 2006, 06:08:09 pm »

Efectivamente, así sí se puede hacer, usando la BIOS (LDIRVM, FILVRM, etc.). Lo que sucede es que, como bien dice WYZ, hay que pasar parámetros mediante registros, lo que supone programación adicional (desde BASIC, usando POKEs que guardan en RAM programas en código máquina). Para lo que tengas que hacer, perfecto. Pero no valdría, por ejemplo, para el concurso que nos traemos entre manos.
En línea
WYZ
Visitante
« Respuesta #21 : 27 de Enero de 2006, 06:36:46 pm »



Se me ocurre otra pregunta:¿hay alguna manera de incluir en un listado basic datos binarios? No me refiro a los tipicos datas o cadenas alfanumericas que deben ser transformadas, sino bytes. Por ejemplo, si el listado basic termina en la direccion de memoria 9000h y quiero guardar en el mismo archivo .bas con save hasta la direccion &h9100 porque ahi he guardado ciertos datos graficos ¿Como seria posible adjuntarlos? ¿y si esto es posible como se podrían volver a cargar?
En línea
SapphiRe
Visitante
« Respuesta #22 : 27 de Enero de 2006, 06:45:37 pm »

Prueba a meterlos con REM...
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #23 : 27 de Enero de 2006, 06:49:52 pm »

...o encriptándolos como tokens BASIC.

El problema es que supongo que el límite por linea en el intérprete será de 256 bytes, por lo que con cada cambio de linea te insertaría datos ajenos a los tuyos. No creo que se pueda integrar un bloque de más de 250 bytes de tamaño dentro de un listado BASIC, la verdad.
En línea

Doom dee doom dee doom
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #24 : 27 de Enero de 2006, 09:19:15 pm »

Por cierto, que hay una rutina de la BIOS muy útil para el desarrollo de juegos de calidad en BASIC. La técnica es un poco compleja, pero creo que sí será aceptable para el concurso. El procedimiento es el siguiente:

1.- Escribir todo el programa en el MSX.
2.- No hacer ninguna copia de seguridad.
3.- Cuando ya esté terminado, ejecutar el siguiente comando en BASIC:

DEFUSR=0:A=USR(0)

Esta rutina se llama CHKRAM, es decir, CHange to Klingon RAM mode, y habilita un modo de acceso a RAM del Z80 no documentado y que acelera todos los programas. De hecho, veréis que es como si a la CPU no le costara ejecutar el programa, gracias al acceso ultrarápido mediante indexación predictiva a la memoria principal. Hasta la fecha, es la técnica más efectiva que he visto para que un programa en BASIC, por pesado que sea, se ejecute muy rápido.

Espero que os ayude  Grin
En línea
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #25 : 28 de Enero de 2006, 03:16:45 am »

Por cierto, que hay una rutina de la BIOS muy útil para el desarrollo de juegos de calidad en BASIC. La técnica es un poco compleja, pero creo que sí será
De hecho es con lo yo andaba experimentando. El problema es que aprovechando el incremento de velocidad y mis rutinas super-optimizadas, el programa BASIC mueve 32 sprites hardware  simultaneos cada 8 lineas  (sin contar con los sprites por software) y claro, el VDP se me calienta un poco. Voy a probar próximamente cuando me toque el aseo mensual a meter conmigo el MSX y la tele en la bañera, a ver si así se refresca un poco. Bueno, ya informaré de los resultados que consiga...  Grin Grin Grin

(que malo es esto de llegar a casa el viernes a las 3 de la mañana con un par de copas beer:) y tener que currar mañana...)
En línea

sempre fun un valente corredor
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #26 : 28 de Enero de 2006, 12:36:53 pm »

Ya te digo; pero malo, malo... Grin
En línea

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


« Respuesta #27 : 28 de Enero de 2006, 12:47:57 pm »

Cita de: WYZ
Se pueden utilizar las rutinas de la BIOS para esto que pides Imanok, pero algunas no son directamente accesibles  sino que hay que introducir los parámetros previos en los registros del z80. En el ejemplo que te pongo, para pocos caracteres no se si se gana en velocidad, pero si cuando hay que mover grandes bloques.

Entonces no creo que me valga, porque estoy haciéndolo para mover bloques relativamente pequeños.

Cita de: robsy
Para lo que tengas que hacer, perfecto. Pero no valdría, por ejemplo, para el concurso que nos traemos entre manos.

No, no... no es para el concurso de basic.

Por cierto, Edu... he probado tu método ese del OUT y no me funciona... solo me muestra por pantalla el patron del vpoke inicial y el resto, nanai...

En línea
Jon_Cortazar
Administrator
Karoshi Forum's God
********
Mensajes: 2777



WWW Email
« Respuesta #28 : 28 de Enero de 2006, 01:42:03 pm »

También es muy socorrido el truco de: 10 MOTORON:MOTOROFF:GOTO10... creo que pone al z80 en modo turbo (o, por lo menos, le hace sonar como mi secadora)
En línea

Jon Cortázar Abraido (aka El Viejo Archivero)
RELEVO Videogames
[Dioniso: La cafeína está haciendo su trabajo; yo espero hacer el mío.]
[pitpan: Me sigue pareciendo más productivo jugar al SNAIL MAZE que seguir esta discusión.]
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #29 : 28 de Enero de 2006, 06:04:36 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.

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.

Pero cuidadín con lo que haces, ¿vale?  Grin
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!