HispaMSX

RE: Una ayudita (MSX 1, BASIC)

2004-07-01 16:03:21
--- En hispamsx(_en_)yahoogroups(_punto_)com, "viejo_archivero" 
<jon_cortazar@t...> 
escribió:
Estoy haciendo un juego conversacional en el que la gran parte de lo 
que es el parser es en BASIC -por la facilidad de controlar las 
cadenas-, y tengo una dudilla.

No me acuerdo si fué en una MSXClub o así, pero leí hace
tiempo que 
había un truquito para limitar las lineas de caracteres de la 
pantalla y que no fueran accesibles al cursor, aunque si mediante 
POKES. vamos, como el WIDTH, pero para las lineas de caracteres en 
lugar de las columnas... esto me vendría muy bien, ya que si
quiero 
utilizar únicamente ciertas lineas inferiores de la pantalla para 
mostrar el texto de la aventura, de esta forma tendría solucionada 
la rutinilla del "scroll" vertical del texto a medida que va 
saliendo...

¡Hola!

Exacto, ese es el poke. Pero debes saber que sólo puedes escribir en 
la parte superior de la pantalla. Vamos, que el poke define el límite 
inferior de la ventana. Supongo que lo que quieres hacer es el 
conversacional normal con la ventana debajo, y que dentro de ésta se 
haga el scroll. Para eso hace falta ensamblador. Estoy haciendo un par 
de conversacionales y en uno de ellos me encontré con ese problema. 
Mis conocimientos de ensamblador son nefastos, pero menos mal que ese 
problema no es tanto como parece.

Supón que quieres escribir de las líneas 10 a la 20. Después de 
escribir una línea, utilizas "if csrlin=21 then..." para comprobar si 
el cursor ha llegado a la línea 21. Si es así, ejecutas una rutina que 
hace:

1- Copiar el bloque que contiene las líneas 11-20 a la RAM.
2- Copias el bloque a la VRAM, a las líneas de la 10 a la 19.
3- Borras la línea 20.

Vamos, que lo que haces es subir un bloque de pantalla una línea. En 
mi programa lo hago así:

9000 KEYOFF:COLOR15,1,1:WIDTH 32
9010 RESTORE 9100:FOR I=56400! TO 56426!:READ A$:POKE I,VAL("&H"+A$):
NEXT
9012 FOR I=56300! TO 56312!:READA$:POKEI,VAL("&H"+A$):NEXT
9013 ' 56301-02 (dir. RAM dibujo)
9014 ' 56307-08 (longitud dibujo)
9015 DEFUSR6=56400!:DEFUSR9=&H156

9100 DATA 21,c0,19:'ld hl,6592
9110 DATA 11,08,cf:'ld de,53000
9120 DATA 06,00:'   ld b,01
9130 DATA 0e,ff:'   ld c,20
9140 DATA cd,59,00:'call 89
9150 DATA 21,08,cf:'ld hl,53000
9160 DATA 11,a0,19:'ld de,6560
9170 DATA 06,01:'   ld b,01
9180 DATA 0e,40:'   ld c,20
9190 DATA cd,5c,00:'call 92
9200 DATA c9:'      ret
9210 '
9220 DATA 21,00,00:' LD HL,0000
9230 DATA 11,00,04:' LD DE,1024
9240 DATA 01,00,00:' LD BC,0000
9250 DATA cd,5c,00:' CALL 77
9260 DATA c9:'       RET

Pruébalo y cambia los valores de la longitud del bloque. Con eso 
puedes subir más líneas o menos. Por cierto, ¿alguien sabe cuál es el 
nemónico para LD BC,x? En mi tabla no viene -qué coñazo el ensamblador 
a mano!!! :(

Bueno, espero que me haya explicado más o menos :)

Saludos!!!

Juanma


<Anterior en la conversación] Conversación actual [Siguiente en la conversación>