--- 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