Para autores de emuladores: ¿Conversacionales para ciegos?

Emuladores y aplicaciones que ayudarán a la perpetuación del Spectrum y su software en el futuro

Moderador: Sir Cilve Sinclair

Avatar de Usuario
Uto
Jack The Nipper
Mensajes: 180
Registrado: Jue Sep 06, 2007 3:32 pm

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por Uto » Mié Sep 17, 2014 6:52 pm

chernandezba escribió:Yo alguna vez he compilado programas de Linux en Windows usando las librerias cygwin; supongo que mingw es similar. El emulador tiene pocas dependencias, incluso podría llegar a compilar para entorno gráfico (xwindow simulado por cygwin) pero precisamente estamos hablando de salida a texto, por tanto, no hace falta ni driver gráfico. Yo creo que tiene que poder compilar sin problemas. Si hay algún fallo de compilación, me puedes pasar captura de pantalla del error, por ejemplo, y te lo reviso.


Me temo que ha sido más que "algún error". Probablemente me faltan librerías a mogollon (me temo que solo uso mingw para compilar aplicaciones de consola). En cualquier caso te dejo aqui el output, por si ves que alguno de los problemas se puede solucionar fácilmente.

Primero el del ./configure

Código: Seleccionar todo

$ ./configure
Initial CFLAGS=
Initial LDFLAGS=
Checking Operating system ... Msys
Checking for gcc compiler ... /c/MinGW/bin/gcc.exe
Checking size of char ... 1
Checking size of short ... 2
Checking Little Endian System ... ./configure: line 325: hexdump: command not f
und

WARNING! Big endian arquitecture. Not tested yet. Run at your own risk!
Checking for stdout functions ... not found
Checking for curses libraries ... found
Checking for aa libraries ... not found
Checking for caca libraries ... not found
Checking for SSL libraries ... not found
Checking for xwindows libraries ... not found
Checking for xwindows extensions ... disabled
Checking for xwindows vidmode extensions ... disabled
Checking for posix threads ... not found
Checking for realtime schedulling ... not found
Checking for audio dsp ... not found
Checking for audio alsa ... not found
Checking for audio pulse ... not found
Checking for coreaudio ... not found
Checking for libsndfile ... not found

Final CFLAGS= -Wall -Wextra
Final LDFLAGS= -lncurses
Creating Makefile
Creating compileoptions.h

Config files successfully generated by ./configure

 Enabled Video output drivers: curses null
 Disabled Video output drivers: stdout aa caca xwindows
 Enabled Audio output drivers: null
 Disabled Audio output drivers: dsp alsa pulse coreaudio
 Enabled Audio File output drivers: raw
 Disabled Audio File output drivers: wav
 MEMPTR emulation: no
 Visual memory option: no
 CPU statistics option: no
 Contended memory emulation: yes

Install prefix: /usr/local



Y ahora el del make, después de que el configure creara el makefile:

Código: Seleccionar todo

$ make
gcc  -Wall -Wextra -c charset.c
gcc  -Wall -Wextra -c scrcurses.c
gcc  -Wall -Wextra -c scrnull.c
gcc  -Wall -Wextra -c audionull.c
gcc  -Wall -Wextra -c ay38912.c
gcc  -Wall -Wextra -c cpu.c
cpu.c: In function 'main':
cpu.c:2489:3: warning: implicit declaration of function 'sleep' [-Wimplicit-func
tion-declaration]
   sleep(1);
   ^
gcc  -Wall -Wextra -c codsinpr.c
codsinpr.c: In function 'instruccion_39':
codsinpr.c:562:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0x0 && high_a<=0x9) && flag_H.v==0 && (low_a>=0x0
&& low_a<=0x9)) diff=0x00;
  ^
codsinpr.c:562:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
codsinpr.c:563:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0x0 && high_a<=0x9) && flag_H.v==1 && (low_a>=0x0
&& low_a<=0x9)) diff=0x06;
  ^
codsinpr.c:563:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
codsinpr.c:564:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0x0 && high_a<=0x8) &&                (low_a>=0xa
&& low_a<=0xf)) diff=0x06;
  ^
codsinpr.c:565:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0xa && high_a<=0xf) && flag_H.v==0 && (low_a>=0x0
&& low_a<=0x9)) diff=0x60;
  ^
codsinpr.c:566:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==1 &&                                 flag_H.v==0 && (low_a>=0x0
&& low_a<=0x9)) diff=0x60;
  ^
codsinpr.c:567:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==1 &&                                 flag_H.v==1 && (low_a>=0x0
&& low_a<=0x9)) diff=0x66;
  ^
codsinpr.c:570:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0xa && high_a<=0xf) && flag_H.v==1 && (low_a>=0x0
&& low_a<=0x9)) diff=0x66;
  ^
codsinpr.c:578:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0x0 && high_a<=0x9) && (low_a>=0x0 && low_a<=0x9))
 flag_C_final.v=0;
  ^
codsinpr.c:578:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
codsinpr.c:579:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0x0 && high_a<=0x8) && (low_a>=0xa && low_a<=0xf))
 flag_C_final.v=0;
  ^
codsinpr.c:581:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0xa && high_a<=0xf) && (low_a>=0x0 && low_a<=0x9))
 flag_C_final.v=1;
  ^
codsinpr.c:587:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_N.v==0 &&                (low_a>=0x0 && low_a<=0x9)) flag_H_final.v=0
;
  ^
codsinpr.c:591:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_N.v==1 && flag_H.v==1 && (low_a>=0x0 && low_a<=0x5)) flag_H_final.v=1
;
  ^
gcc  -Wall -Wextra -c codprddfd.c
gcc  -Wall -Wextra -c codpred.c
gcc  -Wall -Wextra -c operaciones.c
gcc  -Wall -Wextra -c debug.c
gcc  -Wall -Wextra -c tape.c
tape.c: In function 'set_tape_file_options':
tape.c:152:34: warning: unused parameter 'filename' [-Wunused-parameter]
 void set_tape_file_options(char *filename)
                                  ^
gcc  -Wall -Wextra -c tape_tap.c
gcc  -Wall -Wextra -c tape_tzx.c
gcc  -Wall -Wextra -c tape_smp.c
gcc  -Wall -Wextra -c audio.c
gcc  -Wall -Wextra -c screen.c
screen.c: In function 'compare_char_tabla_step':
screen.c:458:71: warning: comparison of promoted ~unsigned with unsigned [-Wsign
-compare]
                 for (numero_byte=0; (numero_byte<8) && (*copia_origen == (*tabl
a_comparar ^ 255 )) ;numero_byte++,copia_origen+=step,tabla_comparar++) {
                                                                       ^
screen.c: In function 'compare_char_tabla_rainbow':
screen.c:515:77: warning: comparison of promoted ~unsigned with unsigned [-Wsign
-compare]
                 for (numero_byte=0; (numero_byte<8) && (origen[numero_byte] ==
(*tabla_comparar ^ 255 )) ;numero_byte++,tabla_comparar++) {
                                                                             ^
gcc  -Wall -Wextra -c mem128.c
gcc  -Wall -Wextra -c zx8081.c
gcc  -Wall -Wextra -c snap.c
snap.c: In function 'set_snap_file_options':
snap.c:56:34: warning: unused parameter 'filename' [-Wunused-parameter]
 void set_snap_file_options(char *filename)
                                  ^
gcc  -Wall -Wextra -c snap_z81.c
gcc  -Wall -Wextra -c snap_zx8081.c
snap_zx8081.c:52:34: error: 'PATH_MAX' undeclared here (not in a function)
 char nombre_cinta_load_nombre_81[PATH_MAX];
                                  ^
make: *** [snap_zx8081.o] Error 1

Avatar de Usuario
chernandezba
Sabreman
Mensajes: 408
Registrado: Mié Oct 17, 2007 5:26 pm

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por chernandezba » Mié Sep 17, 2014 7:19 pm

Uto escribió:
chernandezba escribió:Yo alguna vez he compilado programas de Linux en Windows usando las librerias cygwin; supongo que mingw es similar. El emulador tiene pocas dependencias, incluso podría llegar a compilar para entorno gráfico (xwindow simulado por cygwin) pero precisamente estamos hablando de salida a texto, por tanto, no hace falta ni driver gráfico. Yo creo que tiene que poder compilar sin problemas. Si hay algún fallo de compilación, me puedes pasar captura de pantalla del error, por ejemplo, y te lo reviso.


Me temo que ha sido más que "algún error". Probablemente me faltan librerías a mogollon (me temo que solo uso mingw para compilar aplicaciones de consola). En cualquier caso te dejo aqui el output, por si ves que alguno de los problemas se puede solucionar fácilmente.

Primero el del ./configure

Código: Seleccionar todo

$ ./configure
Initial CFLAGS=
Initial LDFLAGS=
Checking Operating system ... Msys
Checking for gcc compiler ... /c/MinGW/bin/gcc.exe
Checking size of char ... 1
Checking size of short ... 2
Checking Little Endian System ... ./configure: line 325: hexdump: command not f
und

WARNING! Big endian arquitecture. Not tested yet. Run at your own risk!
Checking for stdout functions ... not found
Checking for curses libraries ... found
Checking for aa libraries ... not found
Checking for caca libraries ... not found
Checking for SSL libraries ... not found
Checking for xwindows libraries ... not found
Checking for xwindows extensions ... disabled
Checking for xwindows vidmode extensions ... disabled
Checking for posix threads ... not found
Checking for realtime schedulling ... not found
Checking for audio dsp ... not found
Checking for audio alsa ... not found
Checking for audio pulse ... not found
Checking for coreaudio ... not found
Checking for libsndfile ... not found

Final CFLAGS= -Wall -Wextra
Final LDFLAGS= -lncurses
Creating Makefile
Creating compileoptions.h

Config files successfully generated by ./configure

 Enabled Video output drivers: curses null
 Disabled Video output drivers: stdout aa caca xwindows
 Enabled Audio output drivers: null
 Disabled Audio output drivers: dsp alsa pulse coreaudio
 Enabled Audio File output drivers: raw
 Disabled Audio File output drivers: wav
 MEMPTR emulation: no
 Visual memory option: no
 CPU statistics option: no
 Contended memory emulation: yes

Install prefix: /usr/local



Y ahora el del make, después de que el configure creara el makefile:

Código: Seleccionar todo

$ make
gcc  -Wall -Wextra -c charset.c
gcc  -Wall -Wextra -c scrcurses.c
gcc  -Wall -Wextra -c scrnull.c
gcc  -Wall -Wextra -c audionull.c
gcc  -Wall -Wextra -c ay38912.c
gcc  -Wall -Wextra -c cpu.c
cpu.c: In function 'main':
cpu.c:2489:3: warning: implicit declaration of function 'sleep' [-Wimplicit-func
tion-declaration]
   sleep(1);
   ^
gcc  -Wall -Wextra -c codsinpr.c
codsinpr.c: In function 'instruccion_39':
codsinpr.c:562:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0x0 && high_a<=0x9) && flag_H.v==0 && (low_a>=0x0
&& low_a<=0x9)) diff=0x00;
  ^
codsinpr.c:562:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
codsinpr.c:563:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0x0 && high_a<=0x9) && flag_H.v==1 && (low_a>=0x0
&& low_a<=0x9)) diff=0x06;
  ^
codsinpr.c:563:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
codsinpr.c:564:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0x0 && high_a<=0x8) &&                (low_a>=0xa
&& low_a<=0xf)) diff=0x06;
  ^
codsinpr.c:565:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0xa && high_a<=0xf) && flag_H.v==0 && (low_a>=0x0
&& low_a<=0x9)) diff=0x60;
  ^
codsinpr.c:566:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==1 &&                                 flag_H.v==0 && (low_a>=0x0
&& low_a<=0x9)) diff=0x60;
  ^
codsinpr.c:567:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==1 &&                                 flag_H.v==1 && (low_a>=0x0
&& low_a<=0x9)) diff=0x66;
  ^
codsinpr.c:570:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0xa && high_a<=0xf) && flag_H.v==1 && (low_a>=0x0
&& low_a<=0x9)) diff=0x66;
  ^
codsinpr.c:578:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0x0 && high_a<=0x9) && (low_a>=0x0 && low_a<=0x9))
 flag_C_final.v=0;
  ^
codsinpr.c:578:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
codsinpr.c:579:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0x0 && high_a<=0x8) && (low_a>=0xa && low_a<=0xf))
 flag_C_final.v=0;
  ^
codsinpr.c:581:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_C.v==0 && (high_a>=0xa && high_a<=0xf) && (low_a>=0x0 && low_a<=0x9))
 flag_C_final.v=1;
  ^
codsinpr.c:587:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_N.v==0 &&                (low_a>=0x0 && low_a<=0x9)) flag_H_final.v=0
;
  ^
codsinpr.c:591:2: warning: comparison is always true due to limited range of dat
a type [-Wtype-limits]
  if (flag_N.v==1 && flag_H.v==1 && (low_a>=0x0 && low_a<=0x5)) flag_H_final.v=1
;
  ^
gcc  -Wall -Wextra -c codprddfd.c
gcc  -Wall -Wextra -c codpred.c
gcc  -Wall -Wextra -c operaciones.c
gcc  -Wall -Wextra -c debug.c
gcc  -Wall -Wextra -c tape.c
tape.c: In function 'set_tape_file_options':
tape.c:152:34: warning: unused parameter 'filename' [-Wunused-parameter]
 void set_tape_file_options(char *filename)
                                  ^
gcc  -Wall -Wextra -c tape_tap.c
gcc  -Wall -Wextra -c tape_tzx.c
gcc  -Wall -Wextra -c tape_smp.c
gcc  -Wall -Wextra -c audio.c
gcc  -Wall -Wextra -c screen.c
screen.c: In function 'compare_char_tabla_step':
screen.c:458:71: warning: comparison of promoted ~unsigned with unsigned [-Wsign
-compare]
                 for (numero_byte=0; (numero_byte<8) && (*copia_origen == (*tabl
a_comparar ^ 255 )) ;numero_byte++,copia_origen+=step,tabla_comparar++) {
                                                                       ^
screen.c: In function 'compare_char_tabla_rainbow':
screen.c:515:77: warning: comparison of promoted ~unsigned with unsigned [-Wsign
-compare]
                 for (numero_byte=0; (numero_byte<8) && (origen[numero_byte] ==
(*tabla_comparar ^ 255 )) ;numero_byte++,tabla_comparar++) {
                                                                             ^
gcc  -Wall -Wextra -c mem128.c
gcc  -Wall -Wextra -c zx8081.c
gcc  -Wall -Wextra -c snap.c
snap.c: In function 'set_snap_file_options':
snap.c:56:34: warning: unused parameter 'filename' [-Wunused-parameter]
 void set_snap_file_options(char *filename)
                                  ^
gcc  -Wall -Wextra -c snap_z81.c
gcc  -Wall -Wextra -c snap_zx8081.c
snap_zx8081.c:52:34: error: 'PATH_MAX' undeclared here (not in a function)
 char nombre_cinta_load_nombre_81[PATH_MAX];
                                  ^
make: *** [snap_zx8081.o] Error 1




Bueno, el primer error, del little endian/big, suponiendo que tu arquitectura es little endian (lo "normal") basta que localices, en el archivo configure, la línea:

echo -n "Checking Little Endian System ... "

Y borres las siguientes que te copio a continuación:

RESULT=`echo -n I | hexdump -o | awk '{ print substr($2,6,1); exit}'`
if [ "$RESULT" != "1" ]; then
echo
echo "WARNING! Big endian arquitecture. Not tested yet. Run at your own risk!"
sleep 5
OPTION_WORDS_BIGENDIAN="yes"
else

echo "ok"

fi


Luego, el tema del PATH_MAX... es tan fácil como que , en el archivo que falla, le añadas, a continuación de las líneas #include, la sentencia:

#define PATH_MAX 1024


Lo que me preocupa es que no te activa precisamente el driver stdout, el configure, para activarlo, busca un archivo de cabecera:

#include <termios.h>

Si no lo tienes en mingw tendrías que mirar a ver si se puede instalar aparte, entiendo que tendrá que venir con alguna librería de desarrollo del mingw...


Por cierto, has leído mis posts anteriores, en que comentaba lo de los juegos del CAAD, que ya me funciona alguno?

Saludos
César
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
chernandezba
Sabreman
Mensajes: 408
Registrado: Mié Oct 17, 2007 5:26 pm

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por chernandezba » Mié Sep 17, 2014 8:40 pm

Hola

He conseguido capturar texto para los siguientes juegos y por tanto se puede jugar con ellos con el driver de texto stdout:

-Aventura Original
-Cozumel
-Chichen Itza
-Templos Sagrados
-Jabato (parte 1)

La verdad es que, aunque casi todos usan direcciones diferentes para la rutina de impresión de texto, está en direcciones similares (entre la dirección 30000 y 32000), y con los "trucos" que habilito temporalmente, puedo detectar de manera bastante fácil donde está la rutina
He implementado también un ancho de linea , que está en 42 para esos juegos, pero aun falta la gestión de caracteres de control y acentos, eñes, etc

Saludos
César
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
Uto
Jack The Nipper
Mensajes: 180
Registrado: Jue Sep 06, 2007 3:32 pm

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por Uto » Mié Sep 17, 2014 10:06 pm

chernandezba escribió:Hola

He conseguido capturar texto para los siguientes juegos y por tanto se puede jugar con ellos con el driver de texto stdout:

-Aventura Original
-Cozumel
-Chichen Itza
-Templos Sagrados
-Jabato (parte 1)

La verdad es que, aunque casi todos usan direcciones diferentes para la rutina de impresión de texto, está en direcciones similares (entre la dirección 30000 y 32000), y con los "trucos" que habilito temporalmente, puedo detectar de manera bastante fácil donde está la rutina
He implementado también un ancho de linea , que está en 42 para esos juegos, pero aun falta la gestión de caracteres de control y acentos, eñes, etc



Hola, gracias por todas las pruebas. Intentaré arreglar el compilado con mingw, a ver si lo consigo.

Por otro lado me alegro de los progresos que haces con las aventuras de AD, está muy bien tenerlo, y si consigo compilar para Windows será muy útil. El único problema es que si no lo consigo todo habrá sido en vano, aunque al menos nos habremos divertido por el camino :-)

Quizá podrías buscar los bytes que forman la rutina de imprimir caracter para autodetectarla ¿no? ¿o es diferente en cada aventura de AD?

Avatar de Usuario
Uto
Jack The Nipper
Mensajes: 180
Registrado: Jue Sep 06, 2007 3:32 pm

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por Uto » Jue Sep 18, 2014 9:21 am

antoniovillena escribió:He hecho una pequeña demo con jbacteria que funciona con frames. En el frame de abajo se muestra todo lo que se intercepta por rst 10h. No sé si van por ahí los tiros, aquí tenéis la demo.

http://jbacteria.retrolandia.net/caad

Por cierto el archivo de conversacionales de jbacteria está aparte, lo hice para no mezclarlas con los juegos normales. Concretamente son las "Adventures" del menú de la izquierda, en el siguiente enlace:

http://jbacteria.retrolandia.net/rest

El código de jbacteria lleva mucho tiempo sin actualizarse, por lo que no sé si funcionará en todos los emuladores. En Chrome y Firefox seguro que va.


Hola,

Una vez probado jBacteria me dicen basicamente que el output bien, pero que tienen problemas para encontrar donde hacer el input. Van dando al tabulador pero no se les para en ningún sitio donde teclear. No se si se podría poner una caja de texto, que al pulsar enter mandara los caracteres, con el timing adecuado para que el Spectrum no se coma ninguno, al frame del emulador, y luego un enter). Si se pusiera sería buena que el <input> tuviera title e id, que supongo que lo notarán.

Por otro lado he intentado grabar y cargar partida. Cuando das a SAVE te pide el nombre y luego hace algo que parece que graba, aunque no se sabe donde. Despues cuando das a load carga pero creo que intenta cargar el TAP del juego, no lo grabado (si es que está grabado). En el caso de El Quijote eso produce un reset. ¿jBacteria soporta grabar/cargar? ¿Podría darse soporte grabando en una especie de TAP en el local storage? Imagino que todas las aventuras usan la rutina de la ROM, no veo razones prácticas para usar otra.

zup
Freddy Hardest
Mensajes: 666
Registrado: Vie Ago 15, 2008 2:43 pm

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por zup » Jue Sep 18, 2014 10:22 am

Buff... grabar en un emulador... para mí el más cómodo para grabar es ZX Spin, aunque también he podido grabar bien en Spectaculator. La grabación en cinta es un poco "artificial" (p.ej.: en ZX Spin existen dos cintas, la de cargar y la de grabar), y creo que la grabación en disco es más "natural" (no hay que hacer malabares con las cintas).

Durante un tiempo me he dedicado a hacer conversiones "a disco" de muchos juegos y eso me recuerda que la mayoría de aventuras españolas que se vendieron en disco (creo que las de Level 9 y Zenobi sí que lo soportan) no graban en disco. En su día hice un parche para el Firfurcio, pero esta aventura es un poco rara ya que el sistema de grabación/carga es diferente.

EDITO: Pensándolo bien, diles que no usen SAVE ni LOAD. Va a ser más fácil para todo el mundo que graben snapshots desde el emulador.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start...

Avatar de Usuario
chernandezba
Sabreman
Mensajes: 408
Registrado: Mié Oct 17, 2007 5:26 pm

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por chernandezba » Jue Sep 18, 2014 11:04 am

Hola

Como me sugería Uto, he hecho una rutina de autodetección de rutinas de impresión, para diferentes juegos.
Para Aventuras AD (42 columnas) la rutina es siempre igual. Aunque ya he encontrado la dirección de la rutina, manualmente, para algunos de ellos, el emulador puede activar este método de autodetección, y detectará dicha rutina en cualquier juego que la use.. Luego tiene otros dos métodos adicionales de autodetección "comunes" para un par de aventuras conversacionales que he probado.

Por ejemplo, las de AD siempre empiezan así:

ED 5B F7 FF LD DE,(FFF7)
F1 POP AF
6F LD L,A <-Aqui registro A tiene el caracter a imprimir
26 00 LD H,00
29 ADD HL,HL
29 ADD HL,HL
29 ADD HL,HL
19 ADD HL,DE
D1 POP DE
D5 PUSH DE
3E 08 LD A,08
08 EX AF,AF'
E5 PUSH HL

Luego también he dado soporte a otro trap alternativo de impresión (para soportar dos aparte del RST10H), para juegos que utilizan dos rutinas de impresión, como el Hobbit, en que el texto de la descripción está en 42 columnas en una rutina, y el input y respuesta está en 32 columnas y utiliza otra rutina diferente

Volviendo a la emulación en windows.... ahora no tengo ningun windows para probar, ni en virtual. Aunque quizá si tengo tiempo me instale uno y pruebe con mingw o cygwin a compilarlo

Saludos
César
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
Uto
Jack The Nipper
Mensajes: 180
Registrado: Jue Sep 06, 2007 3:32 pm

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por Uto » Jue Sep 18, 2014 11:30 am

zup escribió:EDITO: Pensándolo bien, diles que no usen SAVE ni LOAD. Va a ser más fácil para todo el mundo que graben snapshots desde el emulador.


Pues también es verdad, lo que no tengo claro es que Jbacteria permita grabar snapshots, y mucho menos cargarlos, dado que es javascript. Con Zesarux si se podría, pero por esa vía aun tenemos el problema de la portabilidad (no he tenido tiempo de mirarlo aun).

Avatar de Usuario
Uto
Jack The Nipper
Mensajes: 180
Registrado: Jue Sep 06, 2007 3:32 pm

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por Uto » Jue Sep 18, 2014 11:34 am

chernandezba escribió:Como me sugería Uto, he hecho una rutina de autodetección de rutinas de impresión, para diferentes juegos.
Para Aventuras AD (42 columnas) la rutina es siempre igual. Aunque ya he encontrado la dirección de la rutina, manualmente, para algunos de ellos, el emulador puede activar este método de autodetección, y detectará dicha rutina en cualquier juego que la use.. Luego tiene otros dos métodos adicionales de autodetección "comunes" para un par de aventuras conversacionales que he probado.


¡Genial!

Luego también he dado soporte a otro trap alternativo de impresión (para soportar dos aparte del RST10H), para juegos que utilizan dos rutinas de impresión, como el Hobbit, en que el texto de la descripción está en 42 columnas en una rutina, y el input y respuesta está en 32 columnas y utiliza otra rutina diferente

Al final con eso van a entrar ya casi todas las conversacionales :-)

Volviendo a la emulación en windows.... ahora no tengo ningun windows para probar, ni en virtual. Aunque quizá si tengo tiempo me instale uno y pruebe con mingw o cygwin a compilarlo.

Se que es complicado, pero yo aunque lo voy a intentar me temo que no tengo muchas posibilidades de éxito: no soy bueno con el C, no entiendo los makefiles, y sobre todo no conozco los fuentes como tú. Lo mas que puedo hacer es ir dando palos de ciego, aunque alguna vez a base de palos he conseguido compilar algo, pero nunca un proyecto tan complejo como un emulador (como mucho herramientas de command line)

Quizá puedas hacer una cosa rara: instalar Wine, luego msys con mingw sobre wine, y probar ahí. Es lo mas rebuscado del mundo pero podría funcionar y asi no tienes que instalar un windows de verdad.

Avatar de Usuario
chernandezba
Sabreman
Mensajes: 408
Registrado: Mié Oct 17, 2007 5:26 pm

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por chernandezba » Jue Sep 18, 2014 11:40 am

Uto escribió:
chernandezba escribió:Como me sugería Uto, he hecho una rutina de autodetección de rutinas de impresión, para diferentes juegos.
Para Aventuras AD (42 columnas) la rutina es siempre igual. Aunque ya he encontrado la dirección de la rutina, manualmente, para algunos de ellos, el emulador puede activar este método de autodetección, y detectará dicha rutina en cualquier juego que la use.. Luego tiene otros dos métodos adicionales de autodetección "comunes" para un par de aventuras conversacionales que he probado.


¡Genial!

Luego también he dado soporte a otro trap alternativo de impresión (para soportar dos aparte del RST10H), para juegos que utilizan dos rutinas de impresión, como el Hobbit, en que el texto de la descripción está en 42 columnas en una rutina, y el input y respuesta está en 32 columnas y utiliza otra rutina diferente

Al final con eso van a entrar ya casi todas las conversacionales :-)

Volviendo a la emulación en windows.... ahora no tengo ningun windows para probar, ni en virtual. Aunque quizá si tengo tiempo me instale uno y pruebe con mingw o cygwin a compilarlo.

Se que es complicado, pero yo aunque lo voy a intentar me temo que no tengo muchas posibilidades de éxito: no soy bueno con el C, no entiendo los makefiles, y sobre todo no conozco los fuentes como tú. Lo mas que puedo hacer es ir dando palos de ciego, aunque alguna vez a base de palos he conseguido compilar algo, pero nunca un proyecto tan complejo como un emulador (como mucho herramientas de command line)

Quizá puedas hacer una cosa rara: instalar Wine, luego msys con mingw sobre wine, y probar ahí. Es lo mas rebuscado del mundo pero podría funcionar y asi no tienes que instalar un windows de verdad.



Hola

Si, intentaré encontrar un hueco para instalar o bien máquina virtual o algo mediante wine.. ;)

Por otra parte, si tu lo pruebas, te puedo ir solventando (o intentar) los errores que te vayas encontrando, me los puedes pasar por aqui, sin problema ;)
No deberían salir errores de lenguaje C tal cual, como mucho, archivos include que no encuentre.
Lo importante es que al hacer el configure, active el driver stdout... y como opcional, las librerias ssl (estas son las que se encargan de detectar qué cinta/snapshot has cargado y activar determinados parámetros, como dónde están las rutinas de texto en los juegos AD... puedes ver el archivo sslfunctions.c y te harás una idea)


Saludos
César
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por antoniovillena » Jue Sep 18, 2014 11:41 am

Uto escribió:Hola,

Una vez probado jBacteria me dicen basicamente que el output bien, pero que tienen problemas para encontrar donde hacer el input. Van dando al tabulador pero no se les para en ningún sitio donde teclear. No se si se podría poner una caja de texto, que al pulsar enter mandara los caracteres, con el timing adecuado para que el Spectrum no se coma ninguno, al frame del emulador, y luego un enter). Si se pusiera sería buena que el <input> tuviera title e id, que supongo que lo notarán.

Por otro lado he intentado grabar y cargar partida. Cuando das a SAVE te pide el nombre y luego hace algo que parece que graba, aunque no se sabe donde. Despues cuando das a load carga pero creo que intenta cargar el TAP del juego, no lo grabado (si es que está grabado). En el caso de El Quijote eso produce un reset. ¿jBacteria soporta grabar/cargar? ¿Podría darse soporte grabando en una especie de TAP en el local storage? Imagino que todas las aventuras usan la rutina de la ROM, no veo razones prácticas para usar otra.


Me he tirado un buen rato cambiando cosas, a ver si damos con la tecla.
  • De momento usen Chrome, es el que yo empleo para depurar y no es plan que tengamos problemas por culpa de usar otro navegador. Aunque el emulador funcione en todos los navegadores, para pruebas vamos a usar Chrome.
  • El foco va a la pantalla (frame) del emulador, lo que pasaba antes es que hacían click en la ventana de texto por lo que perdían el foco. He puesto un parche para que en caso de que hagan click en la ventana de texto el foco vuelva a la ventana del emulador, por lo que no tendría que haber problemas.
  • He puesto 3 frames y en este caso verticales, el frame de la izquierda contiene una lista de juegos. Hay un montón de conversacionales, si queréis reducir la lista me lo decís y yo pongo los juegos que queráis. La idea es trabajar con la ventana del navegador maximizada, con lo que el frame de texto siempre caerá en la misma posición (a 400 pixeles del borde derecho de la pantalla).
  • La fuente que uso ahora es monoespaciada (en concreto Courier), supongo que con esta fuente tendrán más facilidades a la hora de posicionar texto, si no es así me lo dices y pongo una más normal (Arial o Times).
  • Los caracteres Ascii menores de 32 los filtro, el caracter 13 lo convierto en retorno de carro y al caracter '>' le añado un retorno de carro antes (esto vale para Don Quijote y pocos juegos más, pero bueno es).
  • Para borrar la pantalla de texto hay que pulsar Tab. Es recomendable borrar dicha pantalla de vez en cuando, si no hay que andar haciendo scroll sobre la misma.
  • Para salvar partida se pulsa F10 y se genera un snapshot. Hay que renombrar (ponerle extensión .z80) el archivo que te genere. La carga en emulador es muy sencilla, tan sólo hay que coger un archivo .z80 y arrastrarlo/soltarlo a la ventana del emulador (dentro del recuadro, que no pille borde). También hay otro método para generar un snapshot que es pulsado F6 y luego en download (donde pone el texto "Also you can play or download").
  • Yo sólamente uso el método rst 10h, si veis que os puede valer la herramienta más adelante adoptamos el método que ha explicado César.
Imagen

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por antoniovillena » Jue Sep 18, 2014 11:43 am

No lo he dicho, pero para probar sería la misma URL de antes

http://jbacteria.retrolandia.net/caad

Se tienen que ver 3 frames verticales, sino pulsar Ctrl + F5 ya que es posible que tengáis una versión en caché.
Imagen

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por antoniovillena » Jue Sep 18, 2014 11:46 am

Tampoco estamos limitados a los juegos de la lista, se pueden cargar archivos externos en formato .tap. El método es muy parecido al de cargar un .z80, sólo que en lugar de cargarse inmediatamente hay que teclear LOAD"" primero.
Imagen

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por antoniovillena » Jue Sep 18, 2014 12:09 pm

Uto escribió:
zup escribió:EDITO: Pensándolo bien, diles que no usen SAVE ni LOAD. Va a ser más fácil para todo el mundo que graben snapshots desde el emulador.


Pues también es verdad, lo que no tengo claro es que Jbacteria permita grabar snapshots, y mucho menos cargarlos, dado que es javascript. Con Zesarux si se podría, pero por esa vía aun tenemos el problema de la portabilidad (no he tenido tiempo de mirarlo aun).


En javascript se pueden hacer muchas cosas. La lista completa está en la web principal, lo malo que está en inglés. Entre ellas:

Supported SNA, Z80 and TAP files: load by dragging a local file to emulator window (local TAP must execute LOAD""), save SNA with F10.
Imagen

Avatar de Usuario
Uto
Jack The Nipper
Mensajes: 180
Registrado: Jue Sep 06, 2007 3:32 pm

Re: Para autores de emuladores: ¿Conversacionales para ciego

Mensaje por Uto » Jue Sep 18, 2014 1:39 pm

Hola Antonio,

Les comentaré que prueben con Chrome, aunque es posible que si no lo han hecho ya es porque Chrome no se lleve bien con los lectores.

En cuanto a mis pruebas:

- No creo que sea un problema lo del scroll del frame de texto, el lector de pantalla les va a leer todo el texto que salga ahí, se vea o no se vea. De todos modos se puede hacer en Javascript que esa ventana se "scrolee" sola:

Código: Seleccionar todo

var objDiv = document.getElementById("your_div");
objDiv.scrollTop = objDiv.scrollHeight;


- Parece que hay problemas con las aventuras hechas con PAW: prueba Witchcaft, cualquiera de las de Lucybel, o Dr. Van Halen y verás la salida de texto.

- Creo que puede valer con lo de que no se pierda el foco, porque además tienen el feedback sonoro, pero preguntaré a ver que tal ahora.


Con respecto a la lista de aventuras, creo que sería mejor despoblarla, y empezar poco a poco a añadir aventuras en castellano. Podríamos empezar por las de DInamic que son conocidas (Quijote, Megacorp, Carvalho. Sinceramente, no mucha gente entre nuestro "objetivo" juega aventuras en inglés, por lo que toda esa cantidad de aventuras inglesas solo hace más incómodo el manejo. Si quieres que pueda ser utilizado por angloparlantes también, creo que lo suyo es poner una página previa con dos links "Español/English". Otra opción sería poner una caja que filtre. Ten en cuenta que ellos tienen que ir pasando el raton o ir dandole a tabulador para que les vaya leyendo cada titulo, con lo cual si se reduce el número de títulos o se puede filtrar y ellos mismos teclean "Quijo" hasta que solo se ve "El quijote", pues mejor. De todos modos todo esto es para pensarselo cuando todo funcione bien, por ahora da igual que haya un montón.

Les comentaré el modo de salvar partidas e incluso cargar sus propios snapshot.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados