Bizarrada: emulador de IBM PC/8086 como entrada para un concurso de C ofuscado

Foro dedicado a la emulación de sistemas clásicos en el PC o en otros sistemas.
Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 53 veces
Contactar:

Bizarrada: emulador de IBM PC/8086 como entrada para un concurso de C ofuscado

Mensajepor mcleod_ideafix » 23 Feb 2016, 16:24

http://www.ioccc.org/2013/cable3/hint.html

Pues eso. Que este colega se ha marcado un emulador de IBM PC en 4043 bytes de código fuente en C (o dicho de otra forma, en 8086 nibbles). El emulador emula un IBM PC con un 8086, floppy, disco duro, gráfica Hercules/modo texto, y algunos periféricos más, los suficientes como para poder correr AutoCad, Lotus 1-2-3, Windows 3.0 en modo real, etc.

Todos los ficheros necesarios aquí:
http://www.ioccc.org/2013/cable3/

El código fuente (que me expliquen cómo han podido meter todo un emulador de IBM PC en este espacio) aquí:
http://www.ioccc.org/2013/cable3/cable3.c
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: TV Games/Pong Clone
Ubicación: Córdoba
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Bizarrada: emulador de IBM PC/8086 como entrada para un concurso de C ofuscado

Mensajepor radastan » 23 Feb 2016, 16:49

:shock: :shock: :shock: :shock: :shock:

Mi mente no es capaz de asimilarlo. Es imposible, tiene que tener truco, es imposible, tiene que tener truco, es imposible...
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

Avatar de Usuario
nandove
Amiga 1200
Amiga 1200
Mensajes: 1484
Registrado: 12 Mar 2007, 13:12
Sistema Favorito: Commodore Amiga
primer_sistema: (Otro)
consola_favorita: (Otro)
Primera consola: Nintendo NES/Clónica
Gracias dadas: 196 veces
Gracias recibidas: 134 veces

Re: Bizarrada: emulador de IBM PC/8086 como entrada para un concurso de C ofuscado

Mensajepor nandove » 23 Feb 2016, 20:08

El unico truco que le puedo ver, es que no sea un emulador, que sea una virtualización, ya que dice que tira en windows, mac y mas sistemas de 32 o 64bits.... :/ ¿tiraria en una Rpi con nucleo arm?

Aun así sigue siendo una machada de webos.

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 53 veces
Contactar:

Re: Bizarrada: emulador de IBM PC/8086 como entrada para un concurso de C ofuscado

Mensajepor mcleod_ideafix » 23 Feb 2016, 20:45

nandove escribió:El unico truco que le puedo ver, es que no sea un emulador, que sea una virtualización

No, no es virtualización. En la web que he enlazado al principio el autor explica un poco el suplicio que ha sido tener que implementar un decodificador de instrucciones para 8086 teniendo en cuenta que no es RISC, que las instrucciones tienen ancho variable, etc etc.
...First of all the 8086 is a nightmare processor to emulate. Instruction codings are complex and irregular in size and structure, with multiple addressing modes and no consistent memory placement for operands, very often multiple possible encodings for the same instruction, and the bizarre segment:offset memory model...

Y sí: supuestamente compilaría en una Raspberry Pi. Dice Windows, Linux y OS X porque la única conexión que hay entre el emulador y el host real es que ambos deben usar el mismo tipo de endian (little endian). ARM creo recordar que también es little endian, así que no habría problemas. Para máquinas big endian (Power PC, 68k) este emulador compila, pero es completamente inútil porque lo que obtienes es una emulación de un 8086 big endian :D
...If you like living on the edge you can try building the emulator on a big endian machine, and you will get an emulation of a big endian 8086, a rather bizarre and somewhat useless beast. For everyone else, please run the emulator on a little endian machine....

...I have received reports that the emulator works on Raspberry Pi/Android/ARM (you will need to compile with -fsigned-char) and iOS....
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
Chui
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 225
Registrado: 18 Oct 2008, 17:31
Sistema Favorito: Atari ST
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Saturn
Primera consola: TV Games/Pong Clone
Gracias dadas: 3 veces
Gracias recibidas: 11 veces
Contactar:

Re: Bizarrada: emulador de IBM PC/8086 como entrada para un concurso de C ofuscado

Mensajepor Chui » 23 Feb 2016, 21:04

Es imposible que emule todo un PC por muy viejo que sea con un solo fuente de menos de 4KBytes.

¿Donde esta el truco? Habrá que probarlo, pero estando ofuscado la verdad es que lo hace muy difícil de entender.

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 53 veces
Contactar:

Re: Bizarrada: emulador de IBM PC/8086 como entrada para un concurso de C ofuscado

Mensajepor mcleod_ideafix » 23 Feb 2016, 21:43

Chui escribió:¿Donde esta el truco?

En que parte de la "magia" necesaria para decodificar las instrucciones CISC del 8086 lo hace usando varias tablas de lookup que están embebidas en el código de la BIOS.

Chui escribió:Habrá que probarlo, pero estando ofuscado la verdad es que lo hace muy difícil de entender.

Algo te cuenta en el fichero hint.html De hecho te explica qué emula y qué no, y lo que emula, cómo lo emula. Se aprovecha de cosas como por ejemplo que tengas un terminal ANSI, para así hacer que sea el SO quien se encargue de pintar la pantalla de colores en modo texto.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
Chui
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 225
Registrado: 18 Oct 2008, 17:31
Sistema Favorito: Atari ST
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Saturn
Primera consola: TV Games/Pong Clone
Gracias dadas: 3 veces
Gracias recibidas: 11 veces
Contactar:

Re: Bizarrada: emulador de IBM PC/8086 como entrada para un concurso de C ofuscado

Mensajepor Chui » 23 Feb 2016, 22:26

Es increíble en cualquier caso.

Avatar de Usuario
chernandezba
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 253
Registrado: 11 Mar 2015, 10:42
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: ZX81
consola_favorita: NeoGeo
Primera consola: Atari 2600
Gracias dadas: 12 veces
Gracias recibidas: 132 veces

Re: Bizarrada: emulador de IBM PC/8086 como entrada para un concurso de C ofuscado

Mensajepor chernandezba » 23 Feb 2016, 23:05

Madre mía.... A mí todo me hace pensar que es un fake, pero bueno, cosas más raras he visto...
Alguien ha probado a compilarlo?
Debe también haber una manera de des-ofuscar el código sustituyendo todos los #define...
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
chernandezba
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 253
Registrado: 11 Mar 2015, 10:42
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: ZX81
consola_favorita: NeoGeo
Primera consola: Atari 2600
Gracias dadas: 12 veces
Gracias recibidas: 132 veces

Re: Bizarrada: emulador de IBM PC/8086 como entrada para un concurso de C ofuscado

Mensajepor chernandezba » 23 Feb 2016, 23:09

Bueno como dice mcleod y por lo poco que se intuye en la web, el truco está en la bios, donde tiene algunas tablas de opcodes... Bios que no está disponible en código fuente directamente pero que el autor dice que lo proporciona si se le pide...
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
chernandezba
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 253
Registrado: 11 Mar 2015, 10:42
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: ZX81
consola_favorita: NeoGeo
Primera consola: Atari 2600
Gracias dadas: 12 veces
Gracias recibidas: 132 veces

Re: Bizarrada: emulador de IBM PC/8086 como entrada para un concurso de C ofuscado

Mensajepor chernandezba » 24 Feb 2016, 01:11

Buenas

Pues nada, que me ha picado la curiosidad... He pasado el preprocesador de gcc (gcc -E) para sustituir las definiciones de los include, y después de meter unos cuantos saltos de línea para que se vea mas claro, el resultado ha sido este:

https://sites.google.com/site/chernandezba/files/cable3_desofuscado.c?attredirects=0&d=1

Se ven unas pocas funciones, que corresponden a registros del 8086, y luego dentro del main un bucle for, que creo que está el código entero dentro del for (separando cada sentencia con la coma típica del for del tercer campo)

Luego que alguien venga y le vea mas la lógica al asunto... Y bueno, compila aunque con warnings, pero aqui no tengo las SDL y no puedo ejecutarlo.

Saludos
César
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux


Volver a “Emuladores”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 15 invitados