Emulador de CPU Motorola 68000 en FreeBasic

Foro dedicado a la emulación de sistemas clásicos en el PC o en otros sistemas.
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: Emulador de CPU Motorola 68000 en FreeBasic

Mensajepor Hark0 » 22 Jul 2013, 11:54

jepalza escribió:Mcleod_Ideafix: :shock:

Sin palabras. Yo no soy tan técnico. Uso el Basic, y si algo va lento, busco la forma de acelerarlo cambiando cosas, pero no me preocupo de si está mal compilado o si es mejor mezclar C con basic, porque se pierde la esencia de la programación Basic. Si el FreeBasic lleva años funcionando del modo que lo hace, por algo será. Yo particularmente, prefiero no pensar si algo no se compila bien, y preocuparme mas de programar de forma limpia. ¿que no alcanza la velocidad? Bueno, lo importante es divertirse.

Pero me parece bien tu estudio sobre "el cómo", y quizás podrías planteárselo a los desarrolladores del FB. Otra cosa es que te hagan caso, por que yo, en dos ocasiones les envié sendos fallos, y uno de ellos, se seguía repitiendo en las siguientes versiones, y el otro, lo arreglaron en una versión (en la 0.21), y resulta que ha vuelto a salir en la última, osea, que van a su rollo. Ademas, les comentas un fallo, y ni un solo "recibido" o "solucionado", con lo cual, mas bien, pasan de los comentarios de la gente, y si lo arreglan es por que a ellos les surge el hacerlo, no por que tu lo digas....

Por cierto, solo empleo matrices de una dimensión, que son (entiendo) lo mas rápido dentro de lo lentos que son. Sé que tengo la opción de guardar en RAM la información y recuperarla mediante PEEK, que es mas rápido, pero tambien se pierde la esencia de un programa Basic "de siempre".

Hark0: yo he encontrado al menos cinco sitios con la rom, solo buscando "thomson m05 emulator", pero bueno, saltándome normas sobre ciertos temas, te puedo indicar uno de ellos --> http://dcmoto.free.fr/emulateur/index.html (cuando se trata de hablar o enviar por correo ROM con derechos de autor soy MUY cauto, así que, perdona si no te la envío por correo. Simplemente, cuido mis espaldas, por si hay gente "escuchando" por detrás. El resto de los mortales, que haga lo que quiera con las ROM, pero yo, lo controlo mucho)



Gracias por el enlace... de verdad que lo busqué... como tu, no soy muy amante de pedir este tipo de ficheros... "enhabiendo" en la red tanto sitio donde buscar. Disculpas por este tipo de petición. No la repetiré.

;)

@mcleod_ideafix

:shock: :shock: :shock: IM PRE SI O NAN TE!!! =D>
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

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: 54 veces
Contactar:

Re: Emulador de CPU Motorola 68000 en FreeBasic

Mensajepor mcleod_ideafix » 22 Jul 2013, 17:10

jepalza escribió:Hablando de fallos, un fallo que descubrí en la última versión, que me ha obligado a bajar a la anterior:
si haces un SHR de un dato de 32bits, cuyo bit 31 sea "1", en lugar de rotarlo en "0", lo rota en "1", lo que genera un dato irreal, falso.
Ejemplo --> 0x80000000 SHR 1 (rotar 1 bit a la derecha), en lugar de obtener en la salida 0x40000000, se obtiene 0xC0000000, que es incorrecto.
En cambio, si haces a la izquierda, está bien, o sea, 0x00000001 SHL 1, sale 0x00000002.
Es un fallo gordo, por que operaciones de rotación hago docenas de ellas, y al cambiar de versión hace un par de semanas, me empezó a fallar el emulador y no sabía por qué, y me costó averiguarlo. He bajado a la anterior versión, que funciona bien.


UPDATE: lo acabo de probar con la versión 0.90.1 y también funciona bien. Lo que sí he visto (en otras versiones, no sé si en ésta también) es que hay operadores que en principio funcionan, pero cuando están siendo usados dentro de expresiones complejas, dejan de funcionar. Me pasó por ejemplo con el operador Mod usándolo dentro de una expresión de índice a un array.

Esta es otra de esas cosas que enseñábamos en TPBN: la diferencia entre hacer un desplazamiento cuando el número tiene signo o no lo tiene.
Los números Integer tienen signo, así que las operaciones de desplazamiento a la derecha siempre conservan el signo, de ahí el resultado que tú obtienes.

He compilado este programa en la versión 0.90 de FreeBASIC y el resultado es el esperado: al imprimirse en pantalla, a vale 04000000 y b vale C0000000 .

Código: Seleccionar todo

Dim a As UInteger
Dim b As Integer

a = &h80000000
b = &h80000000

Print Hex(a Shr 1)
Print Hex(b Shr 1)

Sleep


Lo que además es corroborado por el código ASM que genera: para la variable "a" es esto:

Código: Seleccionar todo

mov eax, dword ptr [ebp-4]
shr eax, 1

O sea, un desplazamiento lógico a la derecha (no se conserva el signo, así que el último 1 se desplaza a la derecha y en el bit más significativo aparece un 0)

Para la variable "b" ocurre esto otro:

Código: Seleccionar todo

mov eax, dword ptr [ebp-8]
sar eax, 1

Un desplazamiento aritmético a la derecha. Se conserva el signo, de forma que si el número era negativo (su bit más significativo a 1), el resultado sigue siendo negativo. De esta forma puedes usar este tipo de desplazamiento como una división rápida y el resultado es consistente tanto si el dividendo es positivo como si es negativo.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista


Volver a “Emuladores”

¿Quién está conectado?

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