Aprendiendo a programar un Emulador (DCPU-16)

Foro dedicado a la programación en todo tipo de sistemas clásicos.
jepalza

Re: Aprendiendo a programar un Emulador (DCPU-16)

Mensajepor jepalza » 04 Oct 2012, 15:51

Lo del vídeo ya veo que lo entendiste, y es lo que has leído de esa web. Yo te lo dije de cabeza, por que no me acordaba, pero los tiros iban por el buen camino.

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Aprendiendo a programar un Emulador (DCPU-16)

Mensajepor Hark0 » 04 Oct 2012, 16:11

jepalza escribió:Lo del vídeo ya veo que lo entendiste, y es lo que has leído de esa web. Yo te lo dije de cabeza, por que no me acordaba, pero los tiros iban por el buen camino.

Exacto!!!!

Estas son las características de vídeo de la máquina (http://0x10cwiki.com/wiki/DCPU-16):
Tile-based Video RAM of 32x12 tiles defined by 128 4x8 characters stored in RAM

A adaptar tocan!!! :)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Aprendiendo a programar un Emulador (DCPU-16)

Mensajepor Hark0 » 10 Oct 2012, 11:04

Buenas, tras unos días de trabajo + gripazo del 15, sigo con el asunto:

La pregunta: ¿Cómo testear correctamente las instrucciones?

Cuento con estos operandos:

0x00-0x07: register (A, B, C, X, Y, Z, I or J, in that order)
0x08-0x0f: [register]
0x10-0x17: [next word + register]
0x18: POP / [SP++]
0x19: PEEK / [SP]
0x1a: PUSH / [--SP]
0x1b: SP
0x1c: PC
0x1d: O
0x1e: [next word]
0x1f: next word (literal)
0x20-0x3f: literal value 0x00-0x1f (literal)

Y actualmente estoy testeando la instrucción:

JSR a - pushes the address of the next instruction to the stack, then sets PC to a


Para probarlo, se me ha ocurrido introducir en la RAM las diferentes variaciones para testear que TODO se calcula como corresponde.

He testeado con:

JSR A (y también con los registros B,C,X,Y,Z,I y J)
JSR [A] (y también con los registros B,C,X,Y,Z,I y J)
JSR [(PC+1)+A] (y también con los registros B,C,X,Y,Z,I y J)

etc etc etc

¿Existe alguna forma de comprobar QUE todo funciona correctamente o no me queda más remedio que hacer test de la instruccion con TODAS las posibilidades de registros, etc...?


:? Gracias anticipadas
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

jepalza

Re: Aprendiendo a programar un Emulador (DCPU-16)

Mensajepor jepalza » 10 Oct 2012, 11:55

Respuesta NPI :explosion


Emulador de CPU completo y "de verdad" solo he hecho uno, el del 6809. El que hice del CHIP8 era (es) tan simple, que con hacer el emulador, y meter una ROM de juego cualquiera (la mas simple del PONG por ejemplo) me sirvió para depurar y acertar de pleno al 100%
Pero en el mas complejo 6809, la cosa fué muuuuuuy difícil, algo de varios meses. Hice el emulador de CPU, y cuando mas o menos sabía que lo tenía al 90%, me puse seguido a hacer el emulador del THOMSON M05, de ese modo, haciendo dos emuladores a la vez, iba depurando ambos. A base de tesón y paciencia. <rX

El problema era cuando algo no funcionaba en el emulador del Thomson, que no sabía distinguir si era por él mismo, o por el de CPU. Pero eso es lo divertido, el ir "moco a moco" buscando fallos.

En otro caso, me hice un emulador de Z80 en Basic, partiendo de uno que estaba en "C++", y aquí fué mucho mas fácil, por que por la red encontré un código compilado de ASM Z80 a Binario, que testeaba el 99% de las intrucciones del Z80 (se lo curró un tio para su emulador), y me serví de él para ir depurando el mio, y pude acabarlo en poco mas de un mes.

Así que, o buscas una ROM de un juego o aplicación que use esa CPU y la tratas de emular a la par que haces el emul de la CPU, o vas a "dedillo", como dices tú, una a una......

Avatar de Usuario
Lenko
Atari 1040 STf
Atari 1040 STf
Mensajes: 832
Registrado: 29 Mar 2005, 11:39
Gracias dadas: 614 veces
Gracias recibidas: 135 veces

Re: Aprendiendo a programar un Emulador (DCPU-16)

Mensajepor Lenko » 10 Oct 2012, 12:26

Hark0, al final ¿en qué estás programando el emulador?

robsy
MSX Turbo R
MSX Turbo R
Mensajes: 303
Registrado: 25 Oct 2004, 20:11
Sistema Favorito: MSX
primer_sistema: MSX
Gracias recibidas: 12 veces
Contactar:

Re: Aprendiendo a programar un Emulador (DCPU-16)

Mensajepor robsy » 10 Oct 2012, 12:41

En su día me animé a programar un emulador y elegí, por su sencillez, la recreativa del SPACE INVADERS. Es muy sencilla: procesador i8080, que viene a ser un Z80 con menos instrucciones, 8 KB de ROM, RAM con espacio para varibles y VRAM, acceso a controles y sonido vía puertos (IN/OUT). Hice una primera versión en Turbo Pascal y después me animé a programarlo directamente en ensamblador, y el resultado fue un emulador completo en 1.976 bytes :D Se llamaba SPIN, por SPace INvaders. De hecho, debería funcionar al 100% de velocidad en un 80286 y requiere VGA.

Después me animé a hacer un emulador de NES, pero mi implementación de la CPU, 6502, no era demasiado estable - nunca he programado este sistema - así que funcionaban muy pocas ROMs. Y esa es toda mi historia como desarrollador de emuladores... Bueno, en realidad no: antes había programado un emulador de la CPU y un debugger del NEC PDP-11, pero no cuenta como tal.

Mi recomendación para alguien que quiera empezar es que busque información, elija un sistema facilito y se ponga manos a la obra. Lo que hace falta es mucha paciencia, tiempo y dedicación, pero es perfectamente factible. Ahora que lo pienso, tengo algo por ahí empezado en HTML5 + JavaScript, que no es mala opción para emular sistemas sencillos...
----------------------
RetroClasificados - compra, vende o cambia tu material retro totalmente gratis

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Aprendiendo a programar un Emulador (DCPU-16)

Mensajepor Hark0 » 10 Oct 2012, 13:24

jepalza escribió:Respuesta NPI :explosion


Emulador de CPU completo y "de verdad" solo he hecho uno, el del 6809. El que hice del CHIP8 era (es) tan simple, que con hacer el emulador, y meter una ROM de juego cualquiera (la mas simple del PONG por ejemplo) me sirvió para depurar y acertar de pleno al 100%
Pero en el mas complejo 6809, la cosa fué muuuuuuy difícil, algo de varios meses. Hice el emulador de CPU, y cuando mas o menos sabía que lo tenía al 90%, me puse seguido a hacer el emulador del THOMSON M05, de ese modo, haciendo dos emuladores a la vez, iba depurando ambos. A base de tesón y paciencia. <rX

El problema era cuando algo no funcionaba en el emulador del Thomson, que no sabía distinguir si era por él mismo, o por el de CPU. Pero eso es lo divertido, el ir "moco a moco" buscando fallos.

En otro caso, me hice un emulador de Z80 en Basic, partiendo de uno que estaba en "C++", y aquí fué mucho mas fácil, por que por la red encontré un código compilado de ASM Z80 a Binario, que testeaba el 99% de las intrucciones del Z80 (se lo curró un tio para su emulador), y me serví de él para ir depurando el mio, y pude acabarlo en poco mas de un mes.

Así que, o buscas una ROM de un juego o aplicación que use esa CPU y la tratas de emular a la par que haces el emul de la CPU, o vas a "dedillo", como dices tú, una a una......


Bien, lo que he hecho ha sido buscar un emulador "reconocido" (que se sabe que funciona OK) y estoy comparando mis valores con los que da el emulador... tengo también algunas "roms" para probar, pero como todavía no tengo todas las instrucciones implementas... pues eso...

Veo que me tocará ir probando poco a poco ;D
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Aprendiendo a programar un Emulador (DCPU-16)

Mensajepor Hark0 » 10 Oct 2012, 13:25

Lenko escribió:Hark0, al final ¿en qué estás programando el emulador?


GLBasic, es multiplataforma y nada caro... hay demo para el que lo quiera probar...

www.glbasic.com (espero este enlace no se considere spam) ;)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Aprendiendo a programar un Emulador (DCPU-16)

Mensajepor Hark0 » 10 Oct 2012, 13:28

robsy escribió:En su día me animé a programar un emulador y elegí, por su sencillez, la recreativa del SPACE INVADERS. Es muy sencilla: procesador i8080, que viene a ser un Z80 con menos instrucciones, 8 KB de ROM, RAM con espacio para varibles y VRAM, acceso a controles y sonido vía puertos (IN/OUT). Hice una primera versión en Turbo Pascal y después me animé a programarlo directamente en ensamblador, y el resultado fue un emulador completo en 1.976 bytes :D Se llamaba SPIN, por SPace INvaders. De hecho, debería funcionar al 100% de velocidad en un 80286 y requiere VGA.

Después me animé a hacer un emulador de NES, pero mi implementación de la CPU, 6502, no era demasiado estable - nunca he programado este sistema - así que funcionaban muy pocas ROMs. Y esa es toda mi historia como desarrollador de emuladores... Bueno, en realidad no: antes había programado un emulador de la CPU y un debugger del NEC PDP-11, pero no cuenta como tal.

Mi recomendación para alguien que quiera empezar es que busque información, elija un sistema facilito y se ponga manos a la obra. Lo que hace falta es mucha paciencia, tiempo y dedicación, pero es perfectamente factible. Ahora que lo pienso, tengo algo por ahí empezado en HTML5 + JavaScript, que no es mala opción para emular sistemas sencillos...


Gracias por la info... y ami que me suena ese "SPIN" :P

Me he basado en las especificaciones de la DCPU-16 porque tiene MUY poco de todo (a saber 11 registros, 17 opcodes y poco más)... aparentemente "facil" de implementar...

Pero claro, al ser mi primer intento en estas lindes pueeeesss.... voy un poco perdido :P

;)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: Aprendiendo a programar un Emulador (DCPU-16)

Mensajepor Hark0 » 20 Oct 2012, 09:09

Bueno... sobre este asunto... de momento,

GAME OVER

Como explico en mi blog, me había marcado un límite de unos 15 días para afrontar este "proyecto"... desgraciadamente han pasado los días y no he podido terminar a tiempo el emulador, así que de momento abandono su desarrollo. (He de ponerme a terminar mi juego... que llevo no se ni cuanto ya escribiéndolo).

He encontrado algunos problemas en las especificaciones de la CPU que quería emular... para empezar hay 3 versiones diferentes de las especificaciones de las instrucciones, siendo incompatibles unas con otras, en lugar de ser suplementarias (o mejoradas de una versión a otra). El poco tiempo de que dispongo también ha sido otro agravante... tras una jornada de trabajo/família, ponerse cada noche un mínimo de 2 horas agota a cualquiera... qué os cuento...

De todas formas, me siento MUY satisfecho con los resultados obtenidos, ya que aún sin llegar a finalizar completamente el emulador, he entendido (creo) el funcionamiento BASICO de una CPU, los ciclos, las interrupciones,etc... muchas de las cosas que he programado han funcionado como se esperaba, y el control de flujo del mainloop así como la intepretación de Instrucciones y operandos ha sido también positivo en su funcionamiento.

No hace falta comentar que las aportaciones del personal del foro han sido inestimables, así que aprovecho una vez más para agradecer públicamente vuestra ayuda. Una vez más, GRACIAS!

Espero tener tiempo en un futuro para seguir desarrollando este tipo de programas, me ha apasionado el asunto...

Saludos!!!
;)


PD: Si alguien está interesado en la publicación del código fuente que lo comente y lo subo aquí. (Recordar que está escrito con GLBasic).
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.


Volver a “Programación”

¿Quién está conectado?

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