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
Bizarrada: emulador de IBM PC/8086 como entrada para un concurso de C ofuscado
- mcleod_ideafix
- 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
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista
- radastan
- 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
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.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝
- nandove
- 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
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.
Aun así sigue siendo una machada de webos.
- mcleod_ideafix
- 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
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
...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
- Chui
- 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
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.
¿Donde esta el truco? Habrá que probarlo, pero estando ofuscado la verdad es que lo hace muy difícil de entender.
- mcleod_ideafix
- 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
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
- Chui
- 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
Es increíble en cualquier caso.
- chernandezba
- 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
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...
Alguien ha probado a compilarlo?
Debe también haber una manera de des-ofuscar el código sustituyendo todos los #define...
- chernandezba
- 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
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...
- chernandezba
- 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
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
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
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 15 invitados