¿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:
- PCem
- Una colección de ROMs para PCem
- MSDOS 6.22 en Castellano (O en el idioma que quieras)
- OAK CD-ROM Driver (El nombre del archivo es
oakcdrom.sys
) - Drivers Sound Blaster 16
- UNIVBE (Soporte VESA para algunos juegos y demos)
- Algún antivirus
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:
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.
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:
Configuramos la placa de sonido también, como se muestra aquí debajo:
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 respecto 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.
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
.
Al entrar al menú del BIOS
, seleccionamos e ingresamos a la opción
STANDARD CMOS SETUP
:
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:
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ó.
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.
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.
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.