¿Qué es PCem?

PCem es un emulador de arquitectura x86, motherboards, placas de video, y todo cuanto componente se le pueda instalar a una PC-Compatible. No solamente emula las instrucciones de la CPU, sino que tambien emula todos los componentes de hardware que han encontrado. De esta manera, podés ensamblar la computadora de tu infancia, modificar los parametros del mother, meterle placas de video raras: con un rango entre una Hercules hasta una S3 ViRGE. Lo mismo para los procesadores, desde 8086 hasta Pentium 233 MMX. Cada tanto se va agregando más soporte a "nuevo" hardware, y para poder ejecutarlo, tenemos que conseguir las ROMs de los componentes con los que querramos armar nuestra PC 0ldsk00l.

Dependencias

Lo mínimo indispensable para obtener una máquina funcional requiere de la descarga del siguiente software:

Compilación (Linux)

Estos pasos estan orientados a los usuarios de Linux, porque en Windows es más fácil ya que los binarios del emulador estan disponibles desde la página de descargas de PCem. Si estás usuando Windows, podés ir al la siguiente sección.

Clonar los Repositorios con git y mercurial

Como primer paso, tenemos que clonar el repositorio donde esta el código fuente de PCem con el siguiente comando -notar que es un repositorio de Mercurial y no de GIT en este caso-:

$ hg clone https://bitbucket.org/pcem_emulator/pcem

Además en Linux, PCem busca las roms en $HOME/.pcem/roms, asi que instalarlas va a ser bastante fácil con el siguiente comando:

$ git clone https://github.com/BaRRaKudaRain/PCem-ROMs ~/.pcem/roms

Dependencias de compilación (Distro basada en Debian)

PCem usa wxWidgets, SDL2 y OpenAL entre otras cosas, por lo tanto para satisfacer las dependencias necesarias para poder compilarlo, el siguiente comando debería ser suficiente:

$ sudo apt install git gcc binutils mercurial libsdl2-dev libwxgtk3.0-dev libopenal-dev g++

Compilación

$ ./configure --enable-networking --enable-release-build
$ make

Después que termine de compilar, el binario se va a encontrar en ./pcem listo para usarse.

Automake falla!

En caso que en el paso make falle con el siguiente mensaje de error o similar:

configure.ac:9: error: version mismatch.  This is Automake 1.15.1,
configure.ac:9: but the definition used by this AM_INIT_AUTOMAKE
configure.ac:9: comes from Automake 1.15.  You should recreate
configure.ac:9: aclocal.m4 with aclocal and run automake again.
[...]

Se deben ejecutar los siguientes pasos:

$ autoconf -f
$ aclocal
$ automake
$ ./configure --enable-networking --enable-release-build
$ make

Después que termine de compilar, el binario se va a encontrar también en ./pcem listo para usarse.

Fundamentos para armar tu PC

Habiendo tantas opciones y configuraciones posibles, solamente voy a enfocarme en armar una computadora en particular que tenga las siguientes características:

  • Procesador i486DX2 66 MHZ
  • 16 MB RAM
  • Sound Blaster 16
  • Disco Rígido de 1 Gigabyte
  • Placa de Red Novell NE2000
  • Placa de Video S3 ViRGE/DX
  • Disquetera 1 (Unidad A:) 3.5” 1.44Mb
  • Disquetera 2 (Unidad B:) 5.25” 1.2Mb
  • CD-ROM 24X

Para hacerlo, vamos a hacer lo siguiente. Ejecutamos PCem y hacemos click en NEW y escribimos el nombre de la nueva configuración de nuestra computadora:

PCem Nueva Configuración

Luego de esto, seleccionamos las siguientes opciones en el tab MACHINE. Es importante que deseleccionemos la opción Synchronize time to host clock. Lo que hace es pasarle al BIOS la fecha y hora de nuestro sistema a la PC emulada, y para ciertos programas que hacen chequeos de fechas (como un antivirus), puede ser molesto cada vez que booteas tu PC tener que cambiar la fecha porque el host te lo sincroniza. Desactivando esta opción, la fecha queda guardada en la configuración de tu máquina y, aunque seteés todo como si estuvieras en 1994, probablemente la mayor parte de los programas en vez de no ejecutar, solamente se quejen que tenés mal puesto el reloj.

También es importante tener en cuenta la opción Dynamic Recompiler. Si esta disponible para clickearla hacelo. La emulación en PCem requiere un uso de CPU intensivo, y si está disponible, el uso del CPU baja drásticamente. No todas las configuraciones de CPU tienen esta opción habilitada, asi que recomiendo fuertemente activarlo en todos los casos que se pueda.

PCem Configuración CPU y Motherboard

La configuración de la placa de video debería ser suficiente con que sea similar a lo que se muestra en la imagen aqui debajo:

S3 ViRGE DX / SuperVGA

Configuramos la placa de sonido también, como se muestra aquí debajo:

Sound Blaster 16

La parte donde configuramos los dispositivos de almacenamiento - Discos Rígidos y Disqueteras - hay que prestarle un poco más de atención. La parte de las disqueteras es fácil, aunque la parte de los rígidos requiere sacar un screenshot o tener lápiz y papel a mano. Como se ve en la figura de abajo, al hacerle click al botón de agregar disco nos va a aparecer un nuevo menú que nos pregunta donde queremos crear la imágen del rígido y los parámetros Sectors, Heads, Cylinder y Size. Solamente vamos a escribir en el campo Size el número 1024, que es un campo en Megabytes asi que 1024 MB representaria 1 GB que es el tamaño que dijimos anteriormente que íbamos a configurar.

La parte importante donde dije que quizá necesitabamos lápiz y papel, es para que cuando aceptemos esta configuración, estos valores pueden ser necesarios de ajustar manualmente en el BIOS para que el disco sea reconocido por el motherboard en caso que el BIOS no tenga la función de auto-detección de discos rígidos.

Asi que si la computadora que estás armando no auto-detecta la imagen creada por PCem, probablemente tengas que entrar a la configuracion del BIOS cuando bootea la máquina y setear los valores Sectors, Heads y Cylinder a mano. Después de hacer eso, el valor Size es calculado automáticamente por el software del BIOS.

Nota: En la captura de pantalla de abajo, el valor de size dice que es 1023mb, pero esto es el calculo que hace PCem con rescto a los Sectors, Heads y Cylinder, y no a lo que vos desees como tamaño del disco, como habiamos configurado anteriormente que iba a ser en verdad 1024mb.

Configuración de las Disqueteras y el Disco Rígido

El último paso es configurar la placa de red, y en el menú de opciones seleccionamos la placa Novell NE2000

Finalmente, aceptamos la configuración y le damos al botón de play en nuestra nueva PC con todo ese hardware instalado/emulado para continuar con la configuración del BIOS.

Configurando el BIOS

Antes siquiera pensar en empezar a instalar MS-DOS (para después instalar como por ejemplo, una imágen de Windows 95) todavía nos falta configurar el BIOS. Para que sea concordante con la configuración que acabamos de setear en nuestro emulador, debemos configurar mínimamente el hardware emulado de la siguiente manera. Cuando veas la pantalla del POST que es la que está aqui debajo, presiona varias veces la tecla DEL.

Presionar DEL en esta pantalla

Al entrar al menú del BIOS, seleccionamos e ingresamos a la opción STANDARD CMOS SETUP:

Seleccionamos esta opción en la configuración del BIOS

Como anteriormente seleccionamos el motherboard Award SiS 496/497 no vamos a necesitar configurar los parametros del disco rígido acá, asi que desactivamos todos los discos menos el primero (Primary Master) y lo dejamos en Auto ya que este BIOS soporta autodetección. Esto no es el caso con otros motherboards emulados y puede ser necesario que tengas que configurar los parámetros a mano, por eso decía anteriormente que era importante anotar los parametros Sectors, Heads y Cylinder en algún lado solamente por esta parte de la configuración de la PC.

Configurá los valores de este menú como se ve en la siguiente imágen:

Configuramos el BIOS con estos parámetros

Finalmente, llegamos a esta pantalla, donde se nos informa que no se encontró un disco de sistema y que el booteo de un sistema operativo falló.

Tenemos la máquina andando pero sin sistema operativo

Instalando MS-DOS 6.22 como en Abril del ‘94

¿Te acordás que al principio de este artículo había un link para descargarse el MSDOS 6.22 en Castellano? Bueno, acá esta de nuevo y vamos a instalarlo en nuestra flamante computadora emulada. Luego de descomprimir el archivo que nos bajamos, vamos a ver 4 imagenes de disquettes que vamos a tener que insertar en nuestra computadora. Para esto, hacemos click derecho en la pantalla donde se esta ejecutando la emulación y seleccionamos del menú contextual Disc y Change Drive A: y seleccionamos la imagen del primer disquette Disk1.img que ya descomprimimos.

De esta manera insertamos un disquette “virtualmente”. Presionamos ENTER cuando vemos el mensaje DISK BOOT FAILURE, INSERT SYSTEM DISK AND PRESS ENTER como vimos antes cuando la PC terminó de bootear y el instalador de MS-DOS va a empezar a instalar el sistema operativo.

Basta con seguir los pasos que el instalador te va indicando, y cada vez que el instalador te pida cambiar de disquette, cambiamos de imagen con el mismo procedimiento que describi párrafos arriba.

MS-DOS - Insertar disco 2

Eventualmente se nos va a pedir que expulsemos el disquette de la Unidad A: y para hacerlo hacemos click derecho en la pantalla emulada, seleccionamos Disc / Eject Drive A: y reiniciamos la PC.

Pero todavía falta un poco más…

Drivers

El sistema operativo ya bootea, pero si queremos acceder a la placa de sonido, o insertar un CD-ROM, MS-DOS no tiene idea como acceder a estos dispositivos. Por esto vamos a necesitar copiar algúnos drivers en la imagen del rígido que creamos, o seguír metiendo imágenes de disquettes.

Montando la imagen de nuestro Disco Rígido

Buscamos la imagen que creamos de nuestro rígido en nuestra PC host, y una vez que estamos en el directorio donde se aloja, ejecutamos fdisk de la siguiente manera:

 $ fdisk -l 0x705h.486 
Disk 0x705h.486: 1023,8 MiB, 1073479680 bytes, 2096640 sectors
>>> Units: sectors of 1 * 512 = 512 bytes <<<
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device       Boot Start     End Sectors    Size Id Type
0x705h.486p1 *      >>>63<<< 2092607 2092545 1021,8M  6 FAT16

Necesitamos ejecutar fdisk -l para poder extraer dos datos importantes para poder montar nuestra imagen en algún directorio. Enmarcado entre los símbolos >>> y <<< estan los dos datos importantes. Units nos dice cuanto vale cada sector en esta imagen, que es 512 bytes, y en la descripción de la partición de la imagen, vemos que empieza en el sector 63. Para poder obtener el offset correcto, ejecutamos en una shell el siguiente comando usando la calculadora bc:

$ # 63 sectores multiplicados por 512 bytes que tiene cada sector
$ echo "63*512" |bc
32256

Joya, el offset donde empieza el sistema de archivos es 32256. Sabiendo que podemos calcular esto de esta manera, vamos a usar el comando mount y en el parámetro offset vamos a ejecutar exactamente lo mismo como una subshell para que le pase el valor exacto a mount.

Seleccionamos también como tipo de sistema de archivos msdos y montamos todo en el directorio /mnt:

[  4:21PM ]  [ toshi@werkzeug:~/pcem_dev/hdds ]
 $ sudo mount -o loop,offset=$(echo "63*512" |bc) -t msdos 0x705h.486 /mnt
[sudo] password for toshi:         
[  4:25PM ]  [ toshi@werkzeug:~/pcem_dev/hdds ]
 $ ls /mnt 
autoexec.bat  command.com  config.sys  dos  io.sys  msdos.sys  wina20.386

Es muy importante que el emulador PCem NO esté corriendo cuando tengas una imagen de disco rígido montada. El sistema operativo del host y la emulación van a efectuar operaciones de disco a la imagen y el sistema de archivos va a terminar corrompiendose! Asi que, siempre que montés una imagen para transferir archivos, cerrá PCem !

OAK CD-ROM driver

El OAK CD-ROM Driver es un driver genérico que funciona con la mayoría de los CD-ROM IDE que habían disponibles en esa época. Este driver funciona bárbaro para la unidad emulada de CD-ROM de PCem. El nombre del archivo es oakcdrom.sys.

Habiendo montado anteriormente montado la imagen del rígido y HABIENDO APAGADO PCem vamos a copiar el archivo oakcdrom.sys a la imagen:

$ sudo cp ~/msdos/oakcdrom.sys /mnt
$ ls /mnt
autoexec.bat  config.sys  io.sys     oakcdrom.sys
command.com   dos         msdos.sys  wina20.386

Se que es un exceso, pero no puedo dejar de estresar la importancia de no ejecutar PCem mientras se esten montando y desmontando imágenes que PCem esté ejecutando. Listo, yastá. Ya avisé.

El siguiente paso, aprovechandnos que tenemos la imagen montada, configurar el driver del CD-ROM. Para esto, editemos los archivos /mnt/config.sys y /mnt/autoexec.bat. Vamos a editar cada archivo de la siguiente manera:

CONFIG.SYS:

DEVICE=C:\DOS\SETVER.EXE
DEVICE=C:\DOS\HIMEM.SYS
DEVICEHIGH=C:\oakcdrom.sys /D:mscd001
DOS=HIGH
COUNTRY=034,,C:\DOS\COUNTRY.SYS
DEVICE=C:\DOS\DISPLAY.SYS CON=(EGA,,1)
FILES=30

AUTOEXEC.BAT:

C:\DOS\SMARTDRV.EXE /X
@ECHO OFF
PROMPT $p$g
PATH C:\DOS
SET TEMP=C:\DOS
MODE CON CODEPAGE PREPARE=((850) C:\DOS\EGA.CPI)
MODE CON CODEPAGE SELECT=850
KEYB SP,,C:\DOS\KEYBOARD.SYS
LH C:\DOS\MSCDEX.EXE /D:mscd001 /l:D

Finalmente antes de volver a ejecutar nuestra PC emulada, desmontamos la imagen de la siguiente manera.

$ sudo umount /mnt

Drivers Sound Blaster 16

Los Drivers Sound Blaster 16 permiten que MS-DOS pueda tener acceso a la placa. Nos bajamos los drivers y hacemos exactamente lo que hicimos con las imágenes de los disquettes cuando instalamos el sistema operativo.

Instalación Drivers Sound Blaster 16

Acordate de desmontar el disquette cuando reinicies la PC!

Conclusión

Esta es la mínima configuración necesaria para tener andando una computadora emulada, con soporte Sound Blaster y CD-ROM. Los próximos pasos te los dejo a vos. Bajate unas demos de pöuet o algunos CDs de shovelware en archive.org, y quisás también un antivirus y el Norton Commander. Aunque no lo creas, en algunos CDs disponibles en archive.org algunos ejecutables contienen virus hasta el dia de hoy, y tener un antivirus es necesario.

Y naturalmente, no olvidar que muchos juegos, intros y demos necesitan los drivers UNIVBE instalados también para darle soporte VESA a algunas placas de video.