Lectura eficiente del input (entrada) en BASIC ¿cómo?

Página 1/3
| 2 | 3

Por DarkSchneider

Paladin (941)

Imagen del DarkSchneider

03-03-2014, 21:08

He estado buscando y siempre se llega al clásico:
A$=INKEY$
El problema del INKEY$ es que no pillaría varias teclas a la vez pulsadas (diagonales, disparar) y que funciona como cuando tecleas en el editor, me explico, dejas pulsada una tecla, responde, pausa, repetición de tecla.
Lo que a mí me interesa es un scan del input que se pueda usar en juegos, que sea desde el propio BASIC (comandos BASIC) o que se integre de forma sencilla si es una subrutina.
Así mirando encontré en Chapter 5, Access to peripherals through BIOS la instrucción &h141, sin embargo con DEFUSR y USR no sé como pasarle el parámetro y cómo leer lo devuelto. Se supone que USR, según lo que he visto del comando, sería resultado=USR(parámetro), o no lo he entendido bien. Pero si hago un:

DEFUSR=&H141
A=USR(8)

Por ejemplo para leer la línea 8, en A lo que obtengo es 8, más en concreto siempre obtengo lo que mando como parámetro.

Login sesión o register para postear comentarios

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

03-03-2014, 22:46

usarías &h9f para coger el código de la tecla pulsada
cuidado con las teclas code y demás pues son un código diferente y tienen flags diferentes
y luego borrarías el buffer

pero si lo haces desde basic, no te queda otra que ir almacenando el código de la tecla pulsada.

Por Warchild

Paragon (1280)

Imagen del Warchild

03-03-2014, 23:01

Si es para juegos, busca info sobre las instrucciones STICK y STRIG del basic para cursores/joystick y espacio/disparo.
Inkey$ no es útil para eso, pero si precisas más de un botón de disparo STRIG se queda corto y supongo que una opción es usar la bios. Si no me equivoco en la misma linea se pueden leer los cursores, espacio y alguna útil como code o graph (no recuerdo cuales... pero por ahí va...)

Por DarkSchneider

Paladin (941)

Imagen del DarkSchneider

04-03-2014, 10:00

Bien por el momento con STICK y STRIG va perfecto, gracias.

A ver si me pongo con el tema de usar las funciones de BIOS a ver como puedo pasarle parámetros y recuperar el resultado.

Edit:
OK me contesto a mí mismo por si a alguien más le sirve. Para leer el parámetro y devolver un resultado se hace en la dirección &HF7F8, lo he visto en el ejemplo del comando USR de esta misma web.
Pero es que eso no está documentado ¿no?, es decir he mirado el comando USR en manuales de BASIC y no he visto esa dirección mencionada por ninguna parte. OJO a donde he encontrado algo al respecto: http://es.scribd.com/doc/65298864/MSX-Computing-Aug-Sep-1985 en la página 35 (usad el buscador poniendo f7f8 y se llega antes), bastante escondido me parece a mí una información tan importante.

Bueno aquí el código para probar que funciona, mirando la función SNSMAT en el enlace que puse en el mensaje original, vemos que es la fila de los cursores y la barra espaciadora, para temas de probar que funciona.

10 data &h3a,&hf8,&hf7:rem LD A,#f7f8
20 data &hcd,&h41,&h1:rem CALL SNSMAT
30 data &h32,&hf8,&hf7,&hc9:rem LD #f7f8,A; RET
40 for i=0 to 9:read a:poke &hc000+i,a:next i
50 defusr=&hc000
60 cls
70 a=usr(8)
80 locate 0,0:print a
90 goto 70

Por Warchild

Paragon (1280)

Imagen del Warchild

04-03-2014, 15:05

Las direcciones que mencionas están documentadas, lo recuerdo perfectamente del manual de Basic del Sony 201P. Supongo que deben estar en más sitios. Tambien recuerdo que no me enteraba de papa sobre el tema, estaba en el capítulo sobre sub-rutinas en CM y era mucho nivel para mí oO

Por jrcp_kun

Paragon (1410)

Imagen del jrcp_kun

07-03-2014, 16:27

funciona bien

Por e_sedes

Expert (112)

Imagen del e_sedes

16-04-2014, 19:41

Si lo que quieres es comprobar la pulsación de varias teclas simultáneas la BIOS es tu amiga. En el espacio de memoria entre &hFBE5 y &hFBEF está la variable NEWKEY que ocupa 11 bytes. En ella se mapean todas las teclas del teclado, 1 bit por tecla. Si haces un peek puedes leer de golpe toda una fila de teclas. Ojo, no es la panacea. Según la nacionalidad del teclado hay teclas que cambian de posición, pero hay otras que son fijas en todos los modelos, hasta donde yo se. Por ejemplo, en &hFBED tienes los cursores y otras de este modo: derecha, abajo, arriba, izquierda, DEL, INS, HOME, SPACE.
Si el bit esta a 1 es no pulsada, 0 si está pulsada. Así puedes comprobar de un golpe no solo diagonales, también combinaciones que no te salen con STICK como arriba-abajo o izq.-der.

Un saludo.

Por DarkSchneider

Paladin (941)

Imagen del DarkSchneider

17-04-2014, 08:45

O sea que a cada iteración la BIOS hace automáticamente un SNSMAT de cada fila y lo guarda en RAM con lo cual no hace falta repetir la operación uno mismo.

Por e_sedes

Expert (112)

Imagen del e_sedes

17-04-2014, 21:24

Sastamente. Y si quieres mirar los disparadores de los joysticks y la barra también lo tienes en RAM en la variable TRGFLG en &hF3E8.

Por AxelStone

Prophet (2963)

Imagen del AxelStone

06-01-2015, 22:30

Refloto el hilo porque me interesa.

Por Dreamerm42

Hero (622)

Imagen del Dreamerm42

07-01-2015, 01:32

Gracias por reflotar... Smile

Ya que se reflota, pregunto.

Y si yo quisiera por ejemplo hacer un "piano" a partir de las teclas, como hago para poder pulsar teclas a la vez?

Puede parecer una tonteria pero es una duda de estas "tontas" que siempre he querido saber Smile

un saludo Smile

Página 1/3
| 2 | 3