La PC

¿Tiene alguna PC que poseas un conector serial RS232/DE-9? Hace un tiempo vengo armando con la ayuda de algunos amigos y cybercirujeando la computadora que me acompañó desde 1997 a alrededor del 2005. En mi caso, estas son las especificaciones de mi PC retro hasta hoy:

Especificaciones  
Tipo Personal Computer
CPU Penitum MMX 233mhz
RAM 256 MB (1997: 16MB)
HDD Compact Flash 32GB (1997: 2GB)
RED 3COM, RJ45 - La genérica que anda en cualquier lado
Video S3 ViRGE/DX 4MB + Voodoo 3DFX Linkeada
(1997: Trident PCI TGUI9440 1MB/Oak 512kb)
Audio SoundBlaster 16 (1997: SoundBlaster AWE32)
Media Removible Disquetera 5 1/4, 3 1/2, CDRW, DVDRW
Puertos 1 Serial DE-9, 2 Paralelos DB-25, PS/2
Sistema Operativo MS-DOS / Win 3.11

En este caso, lo que queremos hacer es conectarnos a BBSs con terminales de la época, como Terminate 5.0. Lo que nos permitiría también, bajar archivos de estos sistemas siempre y cuando soporten protocolos de transferencia de archivos como zModem. Los que ya se hayan conectado a una BBS con telnet a través de Internet, se habrán dado cuenta ya que es posible bajar archivos de BBSs a menos que se usen terminales especializadas, como SyncTERM.

En caso de usar mTCP, con Packet Driver en MS-DOS, Telnet también es una opción, pero tiene la misma limitación.

Un Modem, Un Puerto, Cables y Una Emulación

Hablemos de RS232. Generalizando, este standard permite la comunicación y envío de datos entre equipos, a través del puerto serie de las computadoras, bajo el conector DE-9 (coloquial e incorrectamente llamado DB9) que es el que se usaba normalmente, cuando conectábamos nuestro mouse serial a la PC. Este cable, en un extremo usa el tipo de conector DE-9 y en el otro un tipo de conector llamado IDC-10.

Dicho esto, hay una cosa interesante cuando mencioné anteriormente sobre estos cables, son un standard. Lamentablemente, no lo son. Si tenés el cableado del cable hecho correctamente, entonces todos los pasos que siguen van a ser muy fáciles. Pero si no, el intercambio de datos entre dos computadoras simplemente no va a suceder correctamente.

DE-9 to IDC-10IDC-10 a DE-9

Resulta ser que hay dos "standares" grandes en el mundo de los cables seriales:

  • AT/Everex
  • DTK/Intel

Cada "standard" tiene su propio Pinout particular. Primero tenes que saber cual standard usa tu motherboard. Luego de esto, tenes que chequear como está hecho el cableado en el cable que va del motherboard al panel trasero de la PC y finalmente hacer los tests pertinentes teniendo en cuenta las siguientes tablas:

Número Pin (interno) AT/Everex Nombre de la Señal Descripción Número Pin RS232 DE-9
1 DCD Data Carrier Detect 1
2 RXD Receive Data 2
3 TXD Transmit Data 3
4 DTR Data Terminal Ready 4
5 GND System Ground 5
6 DSR Data Set Ready 6
7 RTS Request to Send 7
8 CTS Clear to Send 8
9 RI Ring Indicator 9
Número Pin (interno) DTK/INTEL Nombre de la Señal Descripción Número Pin RS232 DE-9
1 DCD Data Carrier Detect 1
2 DSR Data Set Ready 6
3 RXD Receive Data 2
4 RTS Request to Send 7
5 TXD Transmit Data 3
6 CTS Clear to Send 8
7 DTR Data Terminal Ready 4
8 RI Ring Indicator 9
9 GND System Ground 5

IDC10 EscondidoEncontrá el COM1 en forma de conector IDC10

¿Como darse cuenta que pinout tenés? En el motherboard, buscando el numero de serie o buscando si la sigla DTK esta impresa en la plancha del motherboard cerca del número de serie. Si no encontrás nada, es posible que sea un AT/Everex. En el cable, con un multímetro. Le chantás un alambre finito a cada uno de los pines en el IDC y sostenés la aguja del multímetro de un lado y del otro probas que PIN tiene continuidad. Tomás nota de cada uno y comparás el resultado con alguna de las dos tablas anteriores. Si corresponde, sabés que tipo de cable tenés. Si el cable es compatible con el motherboard, ya estás en camino y tenés resuelta la parte más difícil. Todo lo demás, es tener los materiales nomás \o/ !

Cables

USB to Serial InterfaceInterfase o conector USB a Serial

En la imagen de arriba, se ven dos cosas:

  • Un cable RS232 Hembra-Hembra de tipo Null Modem
  • Un conversor USB a Serial, conectado a una Raspberry PI

Sobre el cable serial RS232 de tipo Null Modem, lo que hace a grandes rasgos es cruzar la señal RXD y TXD. Comunmente, este tipo de cables se pueden conseguir en casas de electrónica. Y muy probablemente se cruce el PIN 2 con el PIN 3. Si prestás atención a la tabla de más arriba, esto funciona bárbaro con un AT/Everex, pero en el caso de DTK/INTEL estos cables simplemente no sirven, ya que cruzan otros pines.

Este artículo prácticamente lo escribo por esta misma situación. Mi motherboard tiene un pinout DTK/INTEL. En un principio, pensaba que los cables que iba consiguiendo prestados no funcionaban porque eran viejos o estaban fallados, pero lo que en realidad sucedia, es que el pinout de los cables que conseguia estaban armados para AT/Everex.

Solo pude darme cuenta que estaba pasando en el momento en que me puse a testear con multímetro y un tester RS232 cable por cable, pin por pin, tratando de ver cuando los pines matcheaban al enviar y recibir datos.

RS232 TesterTester RS232. Configurar 300 baudios está muy bien para VER data

Tester RS232 USB to Serial 2El otro extremo del cable USB a Serial, conectado al tester y al puerto serie de la PC

El null modem y el conversor USB a Serial tenian un pinout AT/Everex, pero mi motherboard y el cable del motherboard al panel trasero era incompatible con este "standard". Soldar, no iba a soldar… Asi que esta fue la conversación que tuve con un amigo que tiene una gigantezca colección de componentes electronicos:

- Hey fg! Necesito unos cables seriales para enchufar al motherboard

- ¿Cuántos necesitás?

- ¡TODOS LOS QUE TENGAS!

Y aquí abajo el resultado:

Un montón de cables serialesUn montón de cables seriales provistos por fg

Una vez que entendí cual era el problema de los pinouts y que tenia cables, motherboard y más cables todos más o menos incompatibles entre sí, con un par de horas de buscar cable por cable y testear los pinouts con el multímetro, di con la combinación de cables correcta. Cada uno de estos cables, también pueden ser de varios tipos y algunos cruzan pines y otros dejan los pines con una relación pin a pin directa.

Una vez todo resuelto y probando enviar y recibir data en ambos sentidos ya estaba listo para continuar con el proyecto.

Raspberry PI y TCPSER

Raspberry PI3 B+Raspberry PI3 B+, conectado a mi red y también por USB al Serial-To-USB

En alguna que otra foto de este post se va a poder ver que la raspi esta colgando sostenida por unos cables no muy ordenados. Esta raspi está conectada al conversor USB a Serial. Este conversor tiene un chipset FTDI/FT232RL y fue fabricado por Digitus. Una vez conectado este conversor, chequeamos que la raspberry vea el dispositivo USB y cargado el módulo de kernel correspondiente:

toshi@blackhole:~ $ lsusb |grep 232
Bus 001 Device 007: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC

toshi@blackhole:~ $ lsmod |grep ftdi
ftdi_sio               45056  1
usbserial              36864  3 ftdi_sio

toshi@blackhole:~ $ ls -lah /dev/ttyU*
crw-rw---- 1 root dialout 188, 0 jun  5 00:03 /dev/ttyUSB0

Ahora que tenemos el device /dev/ttyUSB0 disponible para nosotros, solo nos falta bajarnos un programa llamado TCPSER. TCPSER es un emulador Serial a Modem IP que soporta todos los comandos Hayes standard. Este programa es necesario porque vamos a engañar a nuestra PC retro y a Terminate 5.0 - el programa para llamar a BBSs de esa época - haciéndole creer que en el COM1 o COM2 hay un Modem del otro lado.

En mi caso, el comando TCPSER que me funcionó para esto fue el siguiente:

sudo ./tcpser -d /dev/ttyUSB0 -I -s 38400 -p 64128 -l4 -i "&k0&c0"
2023-06-05 17:14:41:1995661424:INFO:Server socket bound to port
2023-06-05 17:14:41:1995661424:INFO:Server socket listening for connections
2023-06-05 17:14:41:1995661424:INFO:Opening serial device
2023-06-05 17:14:41:1995661424:INFO:Opened serial device /dev/ttyUSB0 at speed 38400 as fd 8
2023-06-05 17:14:41:1995661424:INFO:serial device configured
2023-06-05 17:14:41:1993839712:INFO:Control Lines: DSR:1 DCD:1 CTS:1
2023-06-05 17:14:41:1993839712:INFO:Disconnecting modem
2023-06-05 17:14:41:1993839712:INFO:Disconnecting
2023-06-05 17:14:41:1993839712:INFO:Control Lines: DSR:1 DCD:1 CTS:1
2023-06-05 17:14:41:1993839712:INFO:Control Lines: DSR:1 DCD:0 CTS:1
[...]

La velocidad máxima de transferencia que pude lograr fue 38400 baudios. Para más información de que son los otros flags, en el README.md de TCPSER se puede leer una descripción de algunos comandos Hayes y algunas consideraciones para armar los cables necesarios en caso de que no los tengas.

Terminate 5.0

Mesa desarmada de CotéLa PC en Terapia Intensiva de coté ;D

Finalmente, cuando tenemos todo conectado, los cables chequeados, verificado que podamos escribir en ambas computadoras data de un lado al otro bidireccionalmente, estamos listos para configurar Terminate 5.0. En la configuración de los dispositivos, seleccionamos nuestro COM y seteamos los baudios correspondientes. Esto es muy importante: los baudios en los que corre TCPSER tienen que ser iguales a los de Terminate o tu terminal preferida. En caso que no funcione, probá bajando aún más la velocidad. Una vez configurado correctamente, tenes que ver lo siguiente en tu pantalla:

ATZ, OK!ATZ, Ok! :D

Luego configurás tu BBS favorito:

VaultBBS PhonebookPodés poner tanto una IP como un nombre de dominio acá más el puerto

Y dejás un OneLiner como corresponde cada vez que visitás algún sistema:

VaultBBS Oneliner¡Saludos desde el "cyberdespacio"!

Habiendo hecho funcionar esto, pude transferir archivos con el protocolo zModem desde Terminate 5.0 en una PC retro. "Llamar" a varias BBSs, dejar mensajes y traer al presente esa nostalgia de mirar un fondo negro, iluminado con los colores y dibujos de artistas ANSI como muchas veces lo he hecho, allá por el año 199x, antes de la Internet, el IRC y el Internet Explorer 5.0.

Referencias