Habi Hablóg
Declaro:
XML válidoXHTML válido800x600 +
RSS válidoCSS válidoNavegador digno
  Blog   Archivo   Contacto   Administración  

Acerca de

Matemático, informático, aficionado a la electrónica, friki... y otras cosas que no vienen a cuento ni pasan los filtros de palabras.

¿Queríais un blog? Ahí va.

Red antisocial

¡Me van a volver loca! 2.0
La Fragata Portuguesa

Z
¡Me van a volver loca!

Últimos posts

Crackeo preservativo
Restaurando ROMs
Una cosa lleva a la otra
Desbloqueando logros
Teclado en el PCW

Últimos comentarios

genocho
Victor Cortes Abad
Habi
Enrique
Dandare

Calendario

No hay fechas.

Categorías

Chorradas
Paranoias
Posts lúcidos
Tecnoesoterismo
Yuyus

Cenas de Abj

Abj debe 7 cenas.

Frase célebre

HabiSoft: estoy desayunando por tercera vez. Parezco un puto hobbit!

ROMs

Habi - 20/07/2010 23:58:45 - Tecnoesoterismo

Llevaba mucho tiempo con una idea en la cabeza: hacerme mi propio emulador de PCs obsoletos, empezando en XT. La virtualización por tanto no me vale; DosBox es inexacto y sólo apto para juegos de AT en adelante, y siempre y cuando se ciñan a la BIOS en determinadas cosas; PicoXT está seriamente limitado. Así que aprovechando estas pequeñas vacaciones que me he cogido me he puesto a ello.

Y he empezado a hacer pruebas con distintas ROMs. Para la BIOS de un XT hay aparentemente una de dominio público archiconocida, cuyo mensaje de copyright es "Generic Turbo XT Bios, (c) Anonymous", la cual es una taiwanesa que desensambló un tal Ya'akov Miles en 1987. Y también hay una modificación de la misma, por Jon Ρetrosky, llamada Turbo XT BIOS 2.0.

Para la emulación del disco duro del XT está la típica de Western Digital wdbios.rom, y para el video la et4000.bin (de una Tseng Labs ET-4000). También hay algunas sintéticas hechas para QEmu y tal, pero poco se ve por ahí volcado de hardware real.

Así que vamos a ver que tengo por ahí guardado, y vamos a ir volcando esas ROMs con el siguiente programita (ese A86 bajo DOS, hacía tiempo) que nos hace un snapshot del primer mega:

Mov Dx, Offset Nombre
Xor Cx, Cx
Mov Ah, 03C
Int 021
Mov Bx, Ax
Xor Dx, Dx
Mov Bp, Dx
Mov Cx, 32768
Bucle:
Mov Ah, 040
Mov Ds, Bp
Int 021
Add Bp, 0800
Jnz Bucle
Mov Ah, 03e
Int 021
Int 020
Nombre Db 'Prueba.bin',0

 

Un XT de verdad:

Este es un XT casi de verdad. 8088, 4.77 Mhz, venía originalmente con aquella CGA ATI de la cual ya he hablado en otros posts. La placa de abajo son simplemente los buses (todo va a través del ISA, pues va a su velocidad nativa) y a la derecha implementado un puerto serie, otro paralelo y el controlador de disco.

La placa del medio es la memoria, con su interfaz a bus. 640KB.

La de arriba contiene el ordenador: lógica, procesador, BIOS, PIC, PIT, DMA, PPI y las salidas de este último al teclado y altavoz.

Desgraciadamente la BIOS de esta placa ha sido la única ROM que no he podido extraer. No me arranca, el problema está en la placa de arriba; no sé si es el procesador o la ROM (la cual es ROM de máscara, no una EPROM, no la puedo leer sin más en una tarjeta de red).

 

Mi viejo XT:

Anda que no tiene años y ha sufrido abusos esta placa, pero es una campeona. Con todos ustedes, mi viejo PC. Un Inves X30Plus, realmente otro nombre para un ACER XTPlus. El microprocesador y buses de memoria (RAM y BIOS) son de 16 bits (doble de rápidos que los del PC original), pero no es un 8086. Es un NEC V30 (versión de SONY), el cual es como tres veces más rápido que un 8086 a su misma velocidad, y compatible con el 80186 (como un 286 sin modo protegido). Sin embargo nada de misma velocidad, este va a 10 MHz. Nótense las dos EPROMS, para las partes altas y bajas respectivamente de las palabras, que implementan la BIOS. Además tiene RTC, la interfaz de teclado es compatible con XT y AT, admite disqueteras de alta densidad, etc. Pero es un XT.

Desensamblando su BIOS precisamente es donde me he dado cuenta del tema ACER. Sabía del chipset, que tenían tachada la marca, pero no sabía que la BIOS fuese la misma. Aún así, hay una cadena "INVESTRONICA S.A." en un sitio inocuo.

Este PC me duró hasta la universidad, cuando me hice con un Pentium a 120Mhz. Tuve que parchear juegos como el Monkey Island 2 para que no detectase que no era un 286+, e incluso algún gestor de memoria exótico que paginaba a disco emulando EMS. Pero me duró lo que no está escrito.

 

Gráficas:

La de arriba es una auténtica joyita, es la que venía con mi PC. Un clon de una OTI VGA-800 basada en un OAK-037C. De nuevo, ROM partida; compatible con buses de 8 y 16 bits.

¿Por qué una joyita? Por sus emulaciones. Llamando la Int 10 con Ah=FF y Al='C', 'E', 'V', 'M' convertía la tarjeta en una CGA, EGA, VGA o MDA+Hercules ajustando las frecuencias y scans por hardware. Y su emulación era tan buena que funcionaban juegos como MoonBugs, Digger, etc.

La de abajo es más típica, una ATI VGA-800 (¿casualidad?) integrada por Compaq. Tiene los mismos chips que una VGA Wonder XL (ATI 28800-4, etc). Y es una de las pocas que, siendo de 16 bits, funcionan en un bus de 8. Por eso está aquí.

 

HDs:

Por último, necesitamos ROMs de las controladoras de disco XT.

Las de XT son las de la izquierda, no sé para qué he subido las otras del trastero. En fin. La de arriba es una Everex EV-340, compatible con muchos discos duros distintos, y que estuvo en mi viejo PC algún tiempo (a pesar de tener integrado su propia controladora en placa madre) junto con un disco duro de 42MB.

La de abajo es del primer PC que hemos visto, una LCS-6210D. Bastante limitadilla, pero interesante no obstante.

Las otras dos son para ATs (nótese el bus ISA de 16 bits) y no incluyen BIOS. Para quien le interese, una Seagate ST08A y una Western Digital WDAT-140, respectivamente.

 

Hale, ya tengo ROMs para trastear un rato con mi proto-emulador.


genocho - 06/08/2010 11:28:55

Hola habi, he leido esto en tu post : 
 
"Este PC me duró hasta la universidad, cuando me hice con un Pentium a 120Mhz. Tuve que parchear juegos como el Monkey Island 2 para que no detectase que no era un 286+" 
 
Tienes ese exe o parche a mano ? Tengo un xt con un necv20 y otro con un necv30 a 10mhz, y seria un autentico sueño poder rular el monkey 2 !!! 
 
Por cierto que tal iba de velocidad el monkey 2 pese a ser un xt ??? 
 
Saludos.



Habi - 06/08/2010 23:10:07

En su día lo hice un poco a lo cutre: un archivo llamado M2.bat cuyo contenido consistía en una línea "Debug Monkey2.exe < parche.txt", y otro llamado parche.txt con las instrucciones para el debug del DOS. 
 
Se perdió en el tiempo, pero te lo miro de nuevo ahora de uno que tengo por aquí, supongo que será igual que el tuyo. Internamente dice "5.2.28cd (Sep 06 1996 17:32:24)", justo después del infame "This program will only run on AT class 286 machines and above". Si no, es fácil adaptarlo. 
 
Con el IDA vemos que hay dos segmentos de código, empezamos en seg001:290C y al final llamamos al main en seg001:6F92. El primer call es obviamente la rutina de comprobación (seg001:7E8A), mira cómo usa los flags y la pila. 
 
Basta cambiar la comprobación a la vuelta; en seg001:6F9A cambia el or ax, ax por un xor ax, ax y ya tienes el parche. En este caso, offset del fichero $17CDA y cambias el byte $0B por $33. 
 
Por lo tanto, mi parche.txt supongo sería algo tipo del tipo: 
 
G 6F9A 
RAX 



 
Finalmente comentar que en mi viejo XT (Nec V30, 10Mhz, VGA, SB16 con IRQ cambiado (conflicto HD XT) y DMA alto trampeado (no existe en XT)) va perfecto de velocidad, incluso en desplazamientos de pantalla completa. 
 
No fue el único, hubo muchos otros que parcheé. El único que no fui capaz de hacer funcionar en su día fue el Eternam, pero eso es otra historia merecedora un post aparte...



genocho - 08/08/2010 15:43:50

Buenas habi, 
 
He probado el parche.txt que has escrito y da error, saca el mensaje de 286+ y antes algun mensaje del debug que no entiendo (yo soy electronico mayormente). 
 
La version de mi monkey2 es efectivamente la misma. 
 
Tendra que ver que lo este probando en un necv20 o hay alguna cosa mal ? 
 
Podrias probarlo y pasarmelo testeado ? 
 
Respecto a otros juegos que has "crakeado" podrias comentar alguno ? 
 
Creo que seria una buena informacion para los 4 locos que aun defendemos los xt´s. 
 
Saludos. 



Habi - 08/08/2010 18:59:56

Separa el Rax del 0 en líneas distintas. El debug del DOS es peor de lo que recordaba y deben estar en líneas separadas el comando de cambio de registro ax y su nuevo valor. Comprobado en mi viejo XT y corregido mi comentario. 
 
Si aún así no te funciona y tienes la misma versión puede ser debido a que no tienes una versión "limpia": o bien tiene empaquetadas las relocalizaciones (link /exepack, ...), o está comprimido directamente (pklite, ...), o está vacunado (CPAV, ...). X-Tract y a correr. 
 
No tiene nada que ver que sea un V20. Si va en un V30 (como el mío) va en un V20, de la misma forma que si va en un 8086 va en un 8088. Más lento, pero irá. 
 
De los juegos de LucasArts no molesta esto en ningún otro, pues a partir del MI2 se omite la comprobación. Funcionan perfectamente el Día del Tentáculo (incluyendo versión CD con voces), e incluso el Indy 4 (Atlantis). Sólo tendrás problemas de memoria (así que usa CuteMouse como el único residente). Del Sam & Max funciona una versión no-cd. A partir de ahí todos vienen para 386+, y ya no se puede hacer nada (full throttle, the dig, ...). 
 
Del resto que parcheé no recuerdo exactamente los nombres. Algunas utilidades del pack de programas que venía con la SB-Pro Deluxe, un compilador de Modula-2, un juego de aviones que no era el F29 retaliator (ese funcionaba tal cual), un emulador de memoria expandida usando un archivo de intercambio, ... 
 
Me acuerdo del Eternam porque se me resistió. En fin, tendría que mirártelos, y por eso digo que merecería un post aparte.



genocho - 08/08/2010 23:19:49

Hola Habi, 
 
Efectivamente cambiando el 0 de linea funciona, pero tengo un problema, no se si sera por memoria o velocidad pero no puedo entrar al menu salvar / cargar que se activa con la tecla F1 o F5, tampoco funciona la tecla ESC para saltar la intro..... 
 
He encontrado por mis viejos cds, mi version del monkey 2 en disquete, esta es del 91, pero no funciona con el parche txt de la version cd. 
 
Te importa que te lo pase y preparas el parche.txt para el ? 
 
Pasame tu mail y te lo envio, reitero las gracias. 
 
Saludos.



Habi - 09/08/2010 1:36:39

Yo no tengo ningún problema, pero mi viejo V30 es un XT+. Le valen disqueteras de alta densidad, teclados AT, tiene su RTC y CMOS, etc. Y he descubierto hace poco que su BIOS soporta memoria extendida (y expandida y shadow; es un chipset de AT) e incluso tiene los dos PICs típicos de AT, usando sólo el primero. Quizás por eso yo no he tenido problemas. 
 
Si suponemos que el MI2 accede directamente al hardware y se salta la capa de emulación BIOS / hard, puede deberse a varias causas: 
 
1) Tu XT es un clónico no del todo compatible (PCJr, Tandy, ...). 
 
2) Tienes XT con teclado XT (y lo más seguro es que la BIOS no te soporte uno AT) y el programa espera códigos make / break de AT. Los teclados XT y AT son muy distintos, mira por ejemplo: http://www.barcodeman.com/altek/mule/scandoc.php. Prueba la tecla 2 en vez de F5, a ver. 
 
3) Quizás la rutina no quiera funcionar al ver que el teclado no le contesta a los comandos, pues no es bidireccional. 
 
Me temo que NO SOLUCIONARÍA nada el parchar de igual forma la otra versión. Habría que cambiar algo en la rutina del teclado. No es problema de velocidad (se puede enlentecer hasta hacerlo injugable con programas para ello y funciona igualmente) o memoria (te avisa al ejecutarlo). 
 
Veamos como funciona por dentro; el código que responde a la interrupción 9 (IRQ 1) se halla en seg001:1B18, atiende teclas extendidas (flechas,teclado numérico y los control + algo) y llama a la BIOS original para las teclas normales. Sin más inicialización que el desvío de la interrupción (seg001:1BEF).  
 
El resto del teclado lo lee mediante funciones estándar C, las cuales usan el DOS, el cual lo lee de la BIOS. Y nos añade más posibilidades: 
 
4) El fallo está en la BIOS al hacer la traducción de códigos. 
 
5) El fallo está en un controlador intermedio, como el keyb del DOS (no necesariamente relacionado con el teclado, algunos ratones emulan teclas, etc). 
 
6) El fallo está en el código de biblioteca CRT de C, función _getch. 
 
No sólo me parece compatible XT, sino que usa los mismos códigos make. Debiera funcionar, me temo, así que me inclino por la 4 o la 5. Descarto la 6 porque esta librería va en cientos de otros programas. Y las 2 y 3 por lo anterior. 
 
Y descarto parcialmente la 1 porque el escape se lee via _getch y no por acceso directo al hardware. Pero no del todo, pues bien podría ocurrir que quedase enmascarada la IRQ que usase un teclado no estándar, por ejemplo con el código de las tarjetas de sonido. Vaya, eso nos crea otra: 
 
7) Conflicto hardware. Otro dispositivo (sonido, HD no estándar, etc) en su IRQ o placa madre rarita. 
 
Y seguramente habrá otras, en fin. ¿Lo has probado en otro PC o XT (que no AT o ATX)? Y en ese mismo ordenador, ¿funcionan por ejemplo las teclas de dirección, moviendo el cursor (usa num.lock si procede), o pulsando Control+M pone "mouse mode"? No puedo decirte a qué se debe pues no tengo tu XT ni información sobre el mismo. 
 
En cualquier caso, éste es otro problema. El juego funciona en un 186 o compatible, como quería demostrar. Si quieres aun así quieres parchear la otra versión, ejecuta la entrada hasta el main y el primer call es; igual que aquí, pero en otra dirección.



Z - 09/08/2010 13:06:10

Leches, Habi. Deberías empezar a poner tus comentarios por capítulos, para que pudiéramos indexarlos o algo. 



genocho - 09/08/2010 14:47:37

Habi, 
 
He "parcheado" la version de disquetes mia y sigue pasando lo mismo, solo me funciona ctrl+c (salir) y ctrl+m (mouse mode) el resto de teclas rapidas nasti.... 
 
Mi xt, es un scheneider euro pc II, con teclado de 84 teclas integrado en el propio pc, si te suena este pc sabras a lo que me refiero. 
 
La tecla 2 como dices se corresponderia a F5, pero no soy quien a activar el simbolo @ en el, no tiene la tecla ALTGR, o no se la combinacion para activarla....estoy pez en keyb.com, keyboard.sys y similares. 
 
Quizas con algun driver de teclado se pueda solucionar. 
 
He descubierto que con el raton si se pulsan los 2 botones laterales, hace la funcion de la tecla ESC con lo cual pasa las intros. 
 
Solo me falta poder activar la tecla f5 para el menu de salvar, aunque no me permita escribir el savegame, con sobreescribir alguno creado en otro pc no me haria falta el teclado. 
 
Ahora esta el reto, como activo F5 ya sea pasando esa tecla a otra del teclado o lo ideal, pasando F5 al boton central del raton. 
 
Creo que con sneskey se podia hacer algo similar y se asignaba una tecla a un boton de un pad conectado por el paralelo. 
 
Hay algun programa o driver que haga esto con el raton ? 
 
Quizas se pueda implementar en el cutemouse, pero mis conocimientos no llegan a ese nivel. 
 
Alguna idea de algun programa asi para xt ? 
 
Saludos.



Habi - 09/08/2010 18:57:52

Z: Tienes razón, haré mis comentarios más breves. O más largos mis posts. O ambos. O dejaré de contestar a la gente. ¿Qué eliges? 
 
Genocho: Tal y como te dije. Pero al menos ya me has aclarado exactamente qué es lo que te pasa: opción 7. El controlador de teclado de tu placa madre no es compatible del todo, no es capaz de tener dos lecturas del mismo dato del teclado; tras la lectura hay que mandar el flanco por el bit 7 del puerto 61. Tengo un hermano mayor suyo, un Schneider Euro 486 por casa, con el mismo conector no estándar para ratón. 
 
No es problema de que sea XT ni nada, es específico de tu ordenador. Si te fijas en la rutina del Monkey 2 que responde a la IRQ 1: 
 
seg001:1B18 push ax 
... 
seg001:1B26 in al, 60h ; AT Keyboard controller 8042. 
... 
seg001:1BB1 jnz short TeclaBIOS 
... 
seg001:1BDE TeclaBIOS: ; CODE XREF: NInt9+80 j 
... 
seg001:1BE2 jmp cs:OldInt9 
 
Lee el teclado y si no le conviene, delega en la BIOS. Pero el teclado YA fue leído al llegar a ella y no lee nada. Como si no hubieses pulsado tecla alguna. 
 
Aunque esto ya escapa del ámbito de este post (bueno, lo ha hecho desde el principio, el post es acerca de ROMs), mi sugerencia es que parchees en el offset $1294E cambiando $CD $21 por $90 $90. De esta forma no funcionarán las teclas de movimiento del cursor (da igual pues usas ratón) y Ctrl + [S, M, 2 y C] (da igual, pues se puede usar F5), pero funcionarán todas las demás en todo momento. 
 
Por otro lado, con mi viejo ratón (artículo de lujo por aquel entonces) venía un programa llamado kbdmaus para simular teclas, para cualquier interfaz que no soportase ratón. Así que sí, en efecto existen.



genocho - 09/08/2010 22:23:49

Gracias Habi, 
 
El raton de mi xt lo tengo por el puerto serie, es un logitech normal y corriente. Trae como dices en tu 486, un conector para un raton bus especifico de estos ordanadores alemanes, pero jamas di con uno. 
 
Respecto a lo de parchear el offset $1249E cambiando $CD $21 por $90 $90, me dejas totalmente en offside, no tengo ni idea de como se busca ni se parchea el offset en el IDA, como mucho se encontrar los segmentos que es lo que hize ayer para parchear mi monkey2 de disquetes......... 
 
Te agradeceria que escribieras que tengo que poner en el parche.txt para que funcione lo de anular las teclas junto con lo que ya teniamos de saltarse lo de 286+, y ya dejar zanjado el tema. 
 
Si no funciona, pasare a trastear con el v30 olivetti, pero me da pereza porque aun no le he puesto una cf como a este v20. 
 
Reitero las gracias, 
 
Genocho.



Habi - 10/08/2010 2:32:57

Si no recuerdo mal, el ratón es el mismo que el de los Amstrad. Se puede apañar uno de bola (óptico no) conectando los pines directamente a las salidas del codificador óptico y los pulsadores. 
 
Para los parcheos no hace falta el IDA, usa un editor hexadecimal. Vas a esa posición y cambias los bytes. Con el IDA puede hacerse, parcheando en memoria y luego generando de nuevo el archivo, pero es más rápido lo otro. De paso cambia en $17CDA el byte $0B por $33 y ya tienes la comprobación de 286+ quitada para los restos sin la chapuza del debug (que come su buena memoria). 
 
Si insistes en usar comandos del debug, intercala una línea con F CS:1C0EL2 90 en cualquier posición antes del G del final. A ver si con esto ya puedes jugar tranquilamente en ese ordenador. 
 
¿Le has puesto una CF? XT-IDE, supongo. Últimamente estaba pensando montarme una, pero realmente apenas uso estos ordenadores y la interfaz no usa DMA. ¿Qué velocidad da con un HD ATA?



genocho - 10/08/2010 12:37:56

Habi, 
 
Problema resuelto !!! 
 
Al final, ni bios del teclado, ni nada. 
 
Tan simple como lo que tu decias, hacer las cosas bien sin chapuzas del debug. 
 
He cambiado en $17CDA $OB por $33 con un editor hexadecimal, y listo. 
 
Ahora funciona ESC, F5 y todas las teclas como es debido, me falta parchear mi version en disquetes para asi tener el pack completo de monkeys2, ya que la version disquetes tiene EGA y por la curiosidad merece la pena. 
 
Cargarlo con Debug por lo que fuera, metia "algo" que bloqueaba el teclado, la explicacion logica la sabrás tu, yo me hago una remota idea......... 
 
Respecto a las CF, en mi caso, en el euro pc II, tengo un apaño un poco rebuscado. Tengo conectada a uno de los isa externos que le conecte, una controladora scsi future domain autobooteable, a esa controladora tengo conectado un adaptador scsi ide, esto no existia en su dia, ya que es un "apaño" moderno. Finalmente a ese ide del adaptador tengo un adaptador ide a cf y la correspondiente cf pinchada. Alcanzo unos decentes 500kb/s de transferencia, pese a que algo debe perderse en tanta conversion. 
Con una tarjeta isa id / xt un amigo ha conseguido 800kb/s, cerquita del limite del bus isa, con lo cual la velocidad es asombrosamente rapida, la 8088 curruption va perfecta, asi como la carga de juegos como en este caso el monkey2. 
 
Lo dicho, por mi queda zanjado el post con un final feliz. 
 
Solo apuntar que cargando el monkey2 con el debug y parche.txt, cada vez que se pulsaba una tecla sonaba un pitido, lo tipico cuando esta el teclado o algo bloqueado.......pero bueno ahora con lo del editor hex, (cosa que no habia hecho nunca) como la seda. 
 
Me voy a piratear, 
 
Saludos.



Habi - 10/08/2010 13:38:17

Me alegro de que al final puedas jugar en ese ordenador. Es posible, aunque improbable, que te vuelva a pasar esto con otros programas o juegos, debido al controlador de teclado raro que tiene ese ordenador (y muchas otras cosas, igual que los Amstrad, como seguro sabrás). Pero ya has visto cómo solucionarlo más o menos por ti mismo. 
 
Y repito: NO era el debug el que bloqueaba el teclado sino tu propio hard. La prueba es que sólo te funciona ahora por el parche de arriba, el cual previene la captura de la interrupción por parte del Monkey 2. Y es normal que pitase la BIOS, al no estar disponible el controlador de teclado (necesita el flanco para su reset interno y leer el siguiente carácter) y suponer que está lleno el buffer del mismo (no sabe qué error es porque no hay comunicación con un teclado XT). 
 
Si desensamblas, verás que el parche último lo que hace es cambiar una int 21 por dos nops, previniendo el desvío del teclado. Funciona porque el programa usa las funciones estándar para leer el teclado, y engancha sólo para mirar las combinaciones citadas en mi comentario anterior. Para la otra versión cambia ciertamente la dirección a parchear, pero es un ejercicio trivial con lo que has visto. :) 
 
Un tanto rebuscado, en efecto, el apaño de la CF; pero funcional. Yo esperaré a hacerme una XT-IDE cuando pongan soporte DMA o mejor: mapeo de rango de memoria, para aprovechar el bus de datos de 16 bits de mi ordenador.



genocho - 10/08/2010 14:04:50

Habi, 
 
Solo he hecho el cambio de lo de la deteccion del 286, el otro cambio no lo he hecho.......me dio por probarlo asi tal cual.......y como vi que funcionaba no puse lo de la int 21 que habias comentado......cosas del debug supongo o no ??? 
 
Lo de la xt-ide, yo me pille 2, que aunque no tengan soporte dma de momento, van muy finas, y mi v30 olivetti la esta pidiendo a gritos. 
 
Ah, y lo del raton, el raton de los amstrad pc, es un raton bus, y creo que funcionaria, como mucho cambiar dos cables xa por xb, como mucho. 
 
Gracias por todo y siento haberme salido un pelin del tema del post, pero al fin y al cabo son roms, y codigo. 
 
Saludos.



Habi - 10/08/2010 15:54:57

De nada, como digo me alegro que funcione por fin. 
 
No había leído bien lo del parche, ya veo. Sin embargo, me parece extraño ya que el debug no toca nada relacionado con el teclado. Salvo... que no sea el debug y sea el DOS con una mala redirección. 
 
Sólo por completitud, mira a ver si puedes hacer el siguiente experimento: haces "debug monkey2.exe" sin el < parche.txt y tecleas a mano las líneas de texto de éste en la interfaz del debug. Si así te funciona bien, tenemos al culpable por fin.



genocho - 11/08/2010 13:31:42

Efectivamente Habi, 
 
Introduciendo los datos a mano sin el archivo txt, funciona perfectamente sin problemas de teclado. 
 
Cual es el motivo entonces ??? 
 
Asi a lo tonto estoy aprendiendo cositas. 
 
Un saludo.



Habi - 12/08/2010 11:07:51

Tal y como pensaba, el Debug es inocente (e indecente, en cuanto pude usé D86 o Turbo Debugger). 
 
La culpa aquí la tiene el DOS. Me explico: 
 
Aunque por cada llamada a la función $4B de la interrupción $21 el DOS crea un segmento de entorno y un PSP para el programa en cuestión, el DOS es esencialmente un SO monotarea. En concreto, sólo tiene una tabla global de manejadores de fichero, la cual se restaura a la salida del programa. 
 
Al usar la redirección de la entrada estándar (pues el Debug no tiene soporte para macros) ésta es efectiva no sólo para el Debug, sino para cualquier cosa que éste cargue. Y ya que las teclas normales las lee el Monkey II vía DOS, se encuentra leyéndolas exclusivamente de nuestro archivo de texto, ignorando por tanto el buffer de teclado de la BIOS que se llena (y pita). Si las leyese a nivel BIOS o directamente del Hardware (como la mayoría de los juegos), no tendría este problema. 
 
¿Por qué me funciona a mí? Bien, según he comprobado el MS-DOS 5.0 que tengo en este ordenador está parcheado por todos lados para ahorrar memoria, incluye cosas como el Keybsp de Ciriaco, herramientas de la 6.22 y otras de DR-DOS como el Sid y el Diskopt convenientemente hackeadas para no mirar versiones, etc. Ya ni me acordaba de la que tenía aquí liada en su día, a ver si lo paso todo al ordenador actual y lo examino con cuidado. 
 
Por otro lado, he probado con DOS original 4.01, 5.0 y 6.22, y con DR-DOS 6 y 7 (cambiando Debug por Sid y rax por xax); el resultado es el mismo, el teclado queda desviado siempre.



Jose - 22/09/2010 20:11:55

Hola, 
El comentario que haré es de otro post ya cerrado, no sabia como ponerme en contacto con Habi. El post al que me refiero, es el de CGA... Habría la posibilidad de que me pudieras enviar el esquema para pasar de CGA - SCART? 
 
Disculpas por el fuera de tema... 
Gracias y saludos!!



Habi - 27/09/2010 18:06:27

Contestado. :)




Post cerrado