Depurar aplicaciones DOS con Watcom C y OpenWatcom C++

Quizás por su dilatada historia, tal vez por ir en contra de los grandes, o por su elevado rendimiento, o porque era verdaderamente difícil de conseguir, Watcom C fue el entorno de desarrollo más deseado para mi.

Uno de sus encantos es la posibilidad de realizar compilación cruzada o cross compile, es decir, que desde una plataforma, podamos desarrollar un proyecto para otra. Sus herramientas son capaces de correr desde DOS, Win16, Win32, Win64, OS/2, Linux, RDOS o incluso con Windows NT para Alpha AXP, y nos permiten generar aplicaciones, además de para esas plataformas, para NLM o QNX. Es habitual ver ese tipo de compilaciones cruzadas en máquinas Windows que desarrollan para otras plataformas, pero que por ejemplo un humilde entorno para DOS nos permita generar aplicaciones para Windows, OS/2 o Linux, es aún hoy en día algo increíble.

Si bien lo más práctico para desarrollar aplicaciones DOS con OpenWatcom C++ es hacerlo desde una máquina física o virtual con preferiblemente Windows 98 (también valdría Windows 95 o ME) puesto que así podemos contar con sus herramientas GUI y depurar sin problemas sobre el MS-DOS bajo el que corre, es una combinación con la que no me siento demasiado cómodo. Por fortuna, otra de las características que implementaron en Watcom C++ además del local debugger fue el remote debugging o depuración remota. El debugger, mejor dicho, los debuggers, porque existe en versiones gráficas y de modo texto, permiten que la máquina host o anfitriona, es decir, dónde vamos a depurar, conecte con la máquina remota, esto es, donde se va a ejecutar nuestra aplicación.

Gracias a sus Trap Files (TRP), la conexión soporta entre otros los protocolos de red de TCP/IP, NetBIOS, Named Pipes o Novell Netware; pero también otros más particulares que permiten la depuración contra máquinas virtuales usando VDM. Los que nos interesan son los más simples, el de puerto serie y puerto paralelo, diseñados para conectar las dos máquinas usando un cable a tal efecto, y que es realmente como se depuraron grandes aplicaciones del mundos DOS desarrolladas sobre Watcom.

Como recientemente he empezado a retomar un antiguo proyecto abandonado coniox, un reemplazo de conio.h disponible para Windows y DOS y portable, te voy a explicar cómo hacerlo.

Lo que queremos es depurar en la misma máquina, no nos hace falta complicarnos con varias máquinas y varios cables. En el Wiki de OpenWatcom nos explican cómo hacerlo, pero lo hacen basándose en la linea de comandos, que aunque a muchos les encanta, para tales menesteres lo considero engorroso. Así que veamos en este artículo cómo hacerlo fácil.

Configuración inicial

Partiendo de la base de que ya tienes Watcom u OpenWatcom instalado y funcionando correctamente, estos son los pasos que tendrás que hacer la primera vez que quieras depurar remotamente una aplicación DOS. Es la configuración de tu entorno de desarrollo.

1) Necesitas instalarte com0com. Éste es un driver de código abierto y firmado para Win32 y Win64 que emula el protocolo null-modem sobre TCP/IP. A efectos prácticos simula que hay dos puertos de nuestro equipo conectados con un cable, aunque no sea así. Ojo porque Virtual COM Port Driver de Eltima Software es una solución comercial, así que para no liarte, mejor lo descargas de aquí.

2) Aunque puedes hacerlo, no es necesario que configures nada en com0com. En su última versión 3, por defecto crea un puerto COM6 en la máquina Windows que va mapeado con un puerto COM3, así que eso es lo que necesitamos.

3) Lo siguiente es que configures DOSBox para que use ese puerto. Obviamente si tienes instalado DOSBox, tendrás que hacerlo. Esto no se puede hacer desde los menús de DOSBox, así que tendrás que abrir el archivo de configuración dosbox.conf, y en la sección serial fijar que quieres que use el puerto COM3 real de la máquina. Debe quedar así

[serial]
serial1=directserial realport:COM3

Configuración para cada proyecto

La ventaja de OpenWatcom es que no hay que agregar opciones adicionales de compilación para poder depurar o perfilar. Si empiezas de cero, y no tocas nada, todo debería irte como la seda.

4) En el IDE de OpenWatcom deberás crear un nuevo proyecto, y luego, un nuevo target DOS.

Depurar aplicaciones DOS con Watcom C y OpenWatcom C++

5) Luego editas el código con su editor integrado (VIW), o con cualquier otro de tu preferencia.

Depurar aplicaciones DOS con Watcom C y OpenWatcom C++

6) Evidentemente el programa debe poder compilar sin problemas antes de que lo puedas depurar.

Depurar aplicaciones DOS con Watcom C y OpenWatcom C++

7) En el directorio donde esté tu proyecto, deberás copiar algunos archivos desde el directorio BINW de OpenWatcom. Son los archivos que necesitará el depurador remoto.

Para DOS32 son estos:
– DOS4GW.EXE
– SERSERV.EXE
– RSI.TRP
– RSIHELP.EXP

Para DOS16:
– SERSERV.EXE
– STD.TRP

8) En las opciones de remote debugging, debemos especificarle cómo va a conectar a la máquina remota. Lo que le vamos a indicar es que debe conectar con el puerto serie número 6 (COM6) que habíamos configurado en com0com, y el programa que ejecutará, o sea el nuestro.

ser;6 “nombreprograma.exe”

Depurar aplicaciones DOS con Watcom C y OpenWatcom C++

9) Ahora lanzamos ya el servidor de depuración remota en la máquina DOSBox.

En DOS32 lo hacemos así:
SERSERV /trap=rsi

Mientras que para DOS16 es simplemente:
SERSERV

Depurar aplicaciones DOS con Watcom C y OpenWatcom C++

10) Desde el IDE iniciamos una sesión de depuración remota, y si todo ha ido bien, se nos abrira el depurador WD, con nuestro código ejecutándose en la máquina DOSBox.

Depurar aplicaciones DOS con Watcom C y OpenWatcom C++

6 comentarios en “Depurar aplicaciones DOS con Watcom C y OpenWatcom C++”

  1. Victor Nieto (viti95)

    Muchisimas gracias por el tutorial, me va a venir de perlas para poder seguir desarrollando FastDoom!! 😀

  2. Javier Gutiérrez Chamorro (Guti)

    Bienvenido Victor Nieto (viti95). No conocía tu proyecto FastDoom que me parece muy interesante, así que me permito enlazarlo desde aquí: github.com/viti95/FastDoom. Creo que tiene mucho mérito, has conseguido mejoras de casi un 150% que considerando que ya de por sí estaba muy optimizado es un logro. A ver si lo puedo recompilar yo también.

Deja un comentario