πBacteria, emulador Bare Metal para la Raspberry Pi

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 7 veces

Re: πBacteria, emulador Bare Metal para la Raspberry Pi

Mensajepor antoniovillena » 23 Oct 2014, 21:40

EdgeM escribió:Gracias por la foto para diferenciar modelos... afortunadamente parece que tengo el de 512MB :D

¿Hay documentación para programar de esta manera o te lo has currado todo por tu cuenta?


Si no tienes ni idea de ARM yo empezaría por un tutorial como éste:

http://thinkingeek.com/2013/01/09/arm-a ... chapter-1/

Está muy bien explicado y se aprende mucho. Se trata de ARM con librerías (creo que también llamadas al sistema) muy asequible.

Luego está la parte del Bare Metal, que es lo complicado, aquí sí que buscarte un poco la vida porque no hay demasiada literatura. Imprescindible echarle un ojo a este repositorio:

https://github.com/dwelch67/raspberrypi

Ahí te explica muy bien cómo configurar la Raspberry para optimizar la programación Bare Metal. Yo por ejemplo tengo el pitopi, que son dos raspberries, una funcionando con Raspbian a la que te conectas por SSH, y otra en Bare Metal que se conecta con la otra por el puerto serie. Esta última tiene un bootloader que lee un programa Bare Metal del puerto serie y lo ejecuta (también tiene un pin GPIO conectado al reset). Al trabajar de esta forma no tienes que estar constantemente sacando y metiendo la tarjeta SD.

Una vez hayas visto eso hay algunos tutoriales y otros proyectos en Bare Metal código abierto donde puedes ir aprendiendo más. La documentación oficial de los periféricos del SOC deja bastante que desear.

http://www.raspberrypi.org/wp-content/u ... herals.pdf

También te puedes bajar algún datasheet del ARM para tenerlo como referencia para el ensamblador:
http://infocenter.arm.com/help/topic/co ... p7_trm.pdf

Pero yo siempre tiendo a usar google, en los primeros resultados casi siempre está la información oficial que buscas. El ensamblador no es obligatorio para el Bare Metal, de hecho la mayoría de proyectos están en C. En mi caso quería aprender ensamblador porque no lo conocía. En la práctica lo suyo es mezclar las dos cosas, haces la mayoría en C y las partes más críticas en ensamblador.

Avatar de Usuario
EdgeM
Atari 1040 STf
Atari 1040 STf
Mensajes: 800
Registrado: 01 Feb 2008, 12:55
Gracias dadas: 2 veces
Gracias recibidas: 4 veces

Re: πBacteria, emulador Bare Metal para la Raspberry Pi

Mensajepor EdgeM » 23 Oct 2014, 22:42

Gracias por toda la info. Echaré un ojo, porque tengo ganas de meterle mano al ARM, y la Raspberry Pi me parece perfecta :D

Avatar de Usuario
garvidal
Spectrum 48K Plus
Spectrum 48K Plus
Mensajes: 34
Registrado: 15 Oct 2014, 21:15
Sistema Favorito: Amstrad CPC
primer_sistema: PC
consola_favorita: NeoGeo
Primera consola: Nintendo DS/3DS
Gracias dadas: 4 veces
Gracias recibidas: 2 veces

Re: πBacteria, emulador Bare Metal para la Raspberry Pi

Mensajepor garvidal » 24 Oct 2014, 10:07

:shock: me encanta el proyecto.

Nunca he programado en ensamblador para ARM aunque si algo en X86 y en Z80, no se si será muy diferente, aunque imagino que el juego de instrucciones y demás será parecido y cambiarán las llamadas al sistema, le daré un vistazo.

Además me encanta la Raspberry Pi, la primera que compré la utilizé para hacerme una recreativa bartop y ya he visto la potencia del cacharrito. Ahora quiero comprar otra y me ha encantado lo que estás haciendo, sería genial poder hacerlo también para Amstrad. Si soy capaz de aprender (tengo demasiados frentes abiertos) igual me pongo a ello.

:D Me estais arruinando la vida :tecle:
---------------------------------------------------
http://www.garvidal.com
http://www.dicemarket.es

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5314
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: 46 veces
Contactar:

Re: πBacteria, emulador Bare Metal para la Raspberry Pi

Mensajepor mcleod_ideafix » 24 Oct 2014, 12:40

Señor administrador de la página de Twitter de ZDP: este hilo merece estar en Twitter, y que lo retwitee todo kiske :)
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
Jaimen
Amiga 1200
Amiga 1200
Mensajes: 1649
Registrado: 17 Mar 2009, 13:39
Sistema Favorito: Amstrad CPC
primer_sistema: Amstrad CPC
Ubicación: Madrid
Gracias dadas: 130 veces
Gracias recibidas: 15 veces

Re: πBacteria, emulador Bare Metal para la Raspberry Pi

Mensajepor Jaimen » 24 Oct 2014, 12:50

Pedazo de hilo. No tengo raspberry, pero esto igual me hace irme a por uno ... :D
Mi galeria de fotos en 500px.com

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 7 veces

Re: πBacteria, emulador Bare Metal para la Raspberry Pi

Mensajepor antoniovillena » 24 Oct 2014, 16:59

Es un placer para mí ver que hay tanta gente interesada por el proyecto. Como emulador no va a ser gran cosa, pero como punto de partida para aprender a programar ARM o para construir otro emulador más potente sí que le veo futuro.

Ya funciona al 100% de velocidad y también el FLASH. Como sé que muchos lo vais a querer probar sin teclado, he subido una prueba con la ROM del Manic Miner en lugar de con la ROM del Spectrum. Si queréis verlo funcionar con la ROM del spectrum tan sólo tenéis que editar el archivo kernel.img con un editor hexadecimal, eliminar los últimos 16K del archivo y añadir los 16K de la ROM del spectrum (o la que queráis, hay algunos juegos en cartucho).

He creado un video muy cortito de demostración. Si sólo queréis echar una partida al Manic Miner no hace falta que enchuféis un teclado entero, con 4 pulsadores es suficiente: O P Espacio y Enter. Y el enter sólo lo vais a usar una vez para empezar la partida, así que con 3 pulsadores y haciendo un corto para el cuarto es suficiente.

Edito: Para bajar la última versión de kernel.img ir a la [img=http://xn--bacteria-7dg.speccy.org/]web oficial[/img] o al primer mensaje de este hilo.



-- Actualizado 24 Oct 2014, 16:36 --

Aquí pongo el esquema para los pulsadores, si queréis echar una partidita.
Adjuntos
conectar_spectrum.png
conectar_spectrum.png (40.05 KiB) Visto 2582 veces

ZX-81
Commodore 128
Commodore 128
Mensajes: 115
Registrado: 04 Ene 2013, 16:43
Sistema Favorito: Spectrum +2
primer_sistema: ZX81
consola_favorita: Nintendo DS/3DS
Primera consola: Sega Genesis/Megadrive
Ubicación: La orilla del mar Mediterráneo
Gracias dadas: 14 veces
Gracias recibidas: 23 veces
Contactar:

Re: πBacteria, emulador Bare Metal para la Raspberry Pi

Mensajepor ZX-81 » 25 Oct 2014, 13:12

Un proyecto muy chulo. Tan chulo que tentado estoy de pedirme una PI pero ya. :D

Lo que hay que tener es un par bien puestos para currarse un core Z80 en ensamblador para ARM. Eso me ha dejado pasmao. :shock:

He tardado un par de días en hacer algún comentario porque he estado mirando documentación y siguiendo el tutorial que enlazaste que, dicho sea de paso, está muy bien. He descubierto los proyectos bare-metal de Tetris, Chess y el remake de StarFox de NES para la PI. El problema que tiene la PI es que está todo menos documentado de lo deseable. Quitar el S.O. tiene algunas ventajas, pero te obliga a currar lo que no está en los escritos para hacer cualquier cosa (por eso se inventaron los S.O.).

Una cosa que pensé ayer y que está en un término medio relativo, sería sustituir el proceso 'init' del Linux para la PI por el emulador. Eso te dejaría la máquina literalmente para ti solo (con la excepción de los threads de kernel, que se crearían sí o sí, pero no deben ser tantos) sin perder todas las funcionalidades del S.O., como el acceso a los USB por ejemplo. Como ha dicho mcleod_ideafix, currarse un driver USB con soporte de HID no es moco de pavo.

La otra, más cercana a la idea original, consistiría en crear una especie de librerías de apoyo que se pudieran usar con cualquier proyecto que tirara de bare-metal y que se encargara del manejo de diferentes partes de la PI. De esa forma, tu proyecto enlazaría con la parte de las librerías que necesitaras (si no necesitas red, por poner un ejemplo, no enlazas con la librería que maneja el PHY o la capa TCP/IP). Se parecería bastante a crear un pseudo-sistema-operativo. Cierto es que eso es un currazo infame y que tiene poco que ver con un emulador, que es lo que tú pretendes. En cualquier caso, y reconociendo el mérito considerable que tiene lo que has hecho hasta ahora, al final habría que tirar del compilador de C para la mayoría de cosas. Ni siquiera estoy seguro de que fuera buena idea realmente tirar de ensamblador a las primeras de cambio, que un ARM no es una Z80 en muchos sentidos (algunos de ellos poco evidentes).

Lo único que me para de adquirir una PI es que yo no tengo tu capacidad (física y mental) como para crearme un teclado ad-hoc como has hecho tú solo para probar el emulador. Eso dejando aparte que tú te apañas bien porque tienes no una, sino dos PI's conectadas entre ellas para desarrollar más deprisa. Pero aún así, la tentación es demasiado fuerte.... :twisted:

Enhorabuena por el proyecto, que ya sigo de cerca. ;)
Todo espacio de dimensión finita distinta de cero con producto interno tiene una base ortonormal. Tiene sentido, cuando no piensas sobre ello.
Profesor de Matemáticas U.C. Berkeley

Empieza a jugar sin tener que compilar: JSpeccy
Emulador bare-metal para la Raspberry PI 2/3: ZXBaremulator

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 7 veces

Re: πBacteria, emulador Bare Metal para la Raspberry Pi

Mensajepor antoniovillena » 25 Oct 2014, 13:57

ZX-81 escribió:Un proyecto muy chulo. Tan chulo que tentado estoy de pedirme una PI pero ya. :D

Lo que hay que tener es un par bien puestos para currarse un core Z80 en ensamblador para ARM. Eso me ha dejado pasmao. :shock:


No ha sido tan complicado porque he partido del proyecto Ticks, separando la parte de emulación Z80, y luego he traducido de C a ensamblador. Con esto es muy sencillo depurar, puesto que sólo tengo que lanzar los dos procesos en un batch (el de C y el de ensamblador) de forma iterativa hasta encontrar donde hay una diferencia en el snapshot salida. Por ejemplo, ejecuto 1000 ciclos, si difieren ejecuto 500, si son iguales 750, si difieren 625... y así sucesivamente, es una especie de búsqueda binaria. Y también al trabajar con Linux detrás he podido utilizar gdb pero en realidad lo he usado muy poco.

En resumen, escribir el core Z80 ha sido una labor lenta (porque era prácticamente lo primero que escribía en ensamblador de ARM) pero segura, no ha sido como en otros emuladores donde meses después aparecían bugs que tenía que depurar.

Lo que sí ha sido más difícil es juntarlo todo, al principio no funcionaba y como en Bare Metal no se puede depurar pues me hice unas rutinillas que enviaban valores hexadecimales al puerto serie.

ZX-81 escribió:He tardado un par de días en hacer algún comentario porque he estado mirando documentación y siguiendo el tutorial que enlazaste que, dicho sea de paso, está muy bien. He descubierto los proyectos bare-metal de Tetris, Chess y el remake de StarFox de NES para la PI. El problema que tiene la PI es que está todo menos documentado de lo deseable. Quitar el S.O. tiene algunas ventajas, pero te obliga a currar lo que no está en los escritos para hacer cualquier cosa (por eso se inventaron los S.O.).


Eso es también una ventaja según se mire porque te anima a descubrir la máquina por ingeniería inversa.

ZX-81 escribió:Una cosa que pensé ayer y que está en un término medio relativo, sería sustituir el proceso 'init' del Linux para la PI por el emulador. Eso te dejaría la máquina literalmente para ti solo (con la excepción de los threads de kernel, que se crearían sí o sí, pero no deben ser tantos) sin perder todas las funcionalidades del S.O., como el acceso a los USB por ejemplo. Como ha dicho mcleod_ideafix, currarse un driver USB con soporte de HID no es moco de pavo.


Ya pero yo de Linux no tengo mucha idea, tampoco sabría qué librerías aprovechar.

ZX-81 escribió:La otra, más cercana a la idea original, consistiría en crear una especie de librerías de apoyo que se pudieran usar con cualquier proyecto que tirara de bare-metal y que se encargara del manejo de diferentes partes de la PI. De esa forma, tu proyecto enlazaría con la parte de las librerías que necesitaras (si no necesitas red, por poner un ejemplo, no enlazas con la librería que maneja el PHY o la capa TCP/IP). Se parecería bastante a crear un pseudo-sistema-operativo. Cierto es que eso es un currazo infame y que tiene poco que ver con un emulador, que es lo que tú pretendes. En cualquier caso, y reconociendo el mérito considerable que tiene lo que has hecho hasta ahora, al final habría que tirar del compilador de C para la mayoría de cosas. Ni siquiera estoy seguro de que fuera buena idea realmente tirar de ensamblador a las primeras de cambio, que un ARM no es una Z80 en muchos sentidos (algunos de ellos poco evidentes).


El único problema es el teclado USB, para lo demás hay librerías en C que se pueden usar. La gracia de hacerlo en Bare Metal es (desde mi punto de vista) que te lo tienes que currar tú todo. El elegir C o ensamblador ya depende del gusto de cada uno, no hay otras alternativas prácticas para trabajar en Bare Metal. No es mucho más difícil hacerlo en ensamblador, en cualquier otro contexto con acceso fácil librerías sí que es más fácil el C.

ZX-81 escribió:Lo único que me para de adquirir una PI es que yo no tengo tu capacidad (física y mental) como para crearme un teclado ad-hoc como has hecho tú solo para probar el emulador. Eso dejando aparte que tú te apañas bien porque tienes no una, sino dos PI's conectadas entre ellas para desarrollar más deprisa. Pero aún así, la tentación es demasiado fuerte.... :twisted:

Enhorabuena por el proyecto, que ya sigo de cerca. ;)


El teclado no me lo he creado ad-hoc, es un teclado que hice hace un tiempo para probar un clon de spectrum, es idéntico al teclado de un spectrum (a un gomas, no tiene teclas extendidas) por lo que puedes enchufarle el teclado de tu spectrum a la Raspberry sin problemas. He usado ese porque me ocupaba poco espacio, de no tenerlo probablemente habría tirado del DKtronics o de uno de un plus que tengo hecho con pulsadores.

Lo de tener dos Pis conectadas es por el tutorial que te indiqué, pero hay otras opciones: te puedes comprar un cable USB-Serie (cuestan poco más de un euro) o un cable JTAG y no necesitarás dos Pis. Y para cosas muy puntuales se puede desarrollar metiendo y sacando la SD, pero es un coñazo.

-- Actualizado 25 Oct 2014, 13:03 --

Por cierto ya funciona el puerto EAR, acabo de grabar un video y lo estoy subiendo a youtube, luego subo el enlace. A partir de ahora los que quieran acceder a la ROM del Manic Miner que tiren de este enlace.

http://sourceforge.net/p/emuscriptoria/ ... format=raw

-- Actualizado 25 Oct 2014, 13:09 --

El esquema del puerto EAR es éste, es el famoso circuito EAR de Superfo que empleé tanto en el clon de 128 como en el ZX-Uno. Yo por suerte tenía por ahí una plaquita, vosotros os lo tenéis que currar.

EarSuperfo.png
EarSuperfo.png (8.16 KiB) Visto 2532 veces


-- Actualizado 25 Oct 2014, 13:14 --

Ahí va el video




Para que durase poco he escogido un juego muy cortito, también lo he probado con otros juegos y en carga estándar funcionan perfectamente. En carga turbo no ha funcionado debido a que no emulo la contención de memoria.

ZX-81
Commodore 128
Commodore 128
Mensajes: 115
Registrado: 04 Ene 2013, 16:43
Sistema Favorito: Spectrum +2
primer_sistema: ZX81
consola_favorita: Nintendo DS/3DS
Primera consola: Sega Genesis/Megadrive
Ubicación: La orilla del mar Mediterráneo
Gracias dadas: 14 veces
Gracias recibidas: 23 veces
Contactar:

Re: πBacteria, emulador Bare Metal para la Raspberry Pi

Mensajepor ZX-81 » 25 Oct 2014, 15:47

antoniovillena escribió:
ZX-81 escribió:Un proyecto muy chulo. Tan chulo que tentado estoy de pedirme una PI pero ya. :D

Lo que hay que tener es un par bien puestos para currarse un core Z80 en ensamblador para ARM. Eso me ha dejado pasmao. :shock:


No ha sido tan complicado porque he partido del proyecto Ticks, separando la parte de emulación Z80, y luego he traducido de C a ensamblador. Con esto es muy sencillo depurar, puesto que sólo tengo que lanzar los dos procesos en un batch (el de C y el de ensamblador) de forma iterativa hasta encontrar donde hay una diferencia en el snapshot salida. Por ejemplo, ejecuto 1000 ciclos, si difieren ejecuto 500, si son iguales 750, si difieren 625... y así sucesivamente, es una especie de búsqueda binaria. Y también al trabajar con Linux detrás he podido utilizar gdb pero en realidad lo he usado muy poco.

En resumen, escribir el core Z80 ha sido una labor lenta (porque era prácticamente lo primero que escribía en ensamblador de ARM) pero segura, no ha sido como en otros emuladores donde meses después aparecían bugs que tenía que depurar.

Lo que sí ha sido más difícil es juntarlo todo, al principio no funcionaba y como en Bare Metal no se puede depurar pues me hice unas rutinillas que enviaban valores hexadecimales al puerto serie.


Aún así es una tarea tremenda. Sigo igual de pasmao que antes... :D

antoniovillena escribió:
ZX-81 escribió:He tardado un par de días en hacer algún comentario porque he estado mirando documentación y siguiendo el tutorial que enlazaste que, dicho sea de paso, está muy bien. He descubierto los proyectos bare-metal de Tetris, Chess y el remake de StarFox de NES para la PI. El problema que tiene la PI es que está todo menos documentado de lo deseable. Quitar el S.O. tiene algunas ventajas, pero te obliga a currar lo que no está en los escritos para hacer cualquier cosa (por eso se inventaron los S.O.).


Eso es también una ventaja según se mire porque te anima a descubrir la máquina por ingeniería inversa.


Eso es cierto si el objetivo que te planteas es aprender ASM, lo que es tu caso. El emulador solo es la excusa. Y aún así, la ingeniería inversa está al alcance de pocos y, en algunos casos extremos como el chip gráfico, al alcance de casi ninguno.

antoniovillena escribió:
ZX-81 escribió:Una cosa que pensé ayer y que está en un término medio relativo, sería sustituir el proceso 'init' del Linux para la PI por el emulador. Eso te dejaría la máquina literalmente para ti solo (con la excepción de los threads de kernel, que se crearían sí o sí, pero no deben ser tantos) sin perder todas las funcionalidades del S.O., como el acceso a los USB por ejemplo. Como ha dicho mcleod_ideafix, currarse un driver USB con soporte de HID no es moco de pavo.


Ya pero yo de Linux no tengo mucha idea, tampoco sabría qué librerías aprovechar.


El Proceso de arranque en Linux, de forma resumida, es que carga el núcleo del sistema y entonces se ejecuta el proceso 1 que suele ser /sbin/init (ahora empiezan a cambiarlo por systemctl, pero esa es otra historia). En ese momento, se ha inicializado el hardware pero no se ha configurado nada y no es que tendrías que usar librerías, que no hay todavía, es que tendrías que hacer uso de los servicios del sistema directamente, como si se tratara de la glibc. Es decir, solo está el kernel, proporcionando los servicios más básicos y tu programa. El init es el encargado de ir haciendo el resto de tareas del sistema, de modo que si lo quitas, ni se montan sistemas de ficheros, ni se configura la red, ni se arrancan otros procesos. init se ejecuta con privilegios de root y tienes acceso al scheduler de tiempo real, así que es difícil pedir mucho más. Lo único que no puedes controlar son los threads de kernel que se lanzan automáticamente, pero en ese punto deben ser muy pocos.

antoniovillena escribió:
ZX-81 escribió:La otra, más cercana a la idea original, consistiría en crear una especie de librerías de apoyo que se pudieran usar con cualquier proyecto que tirara de bare-metal y que se encargara del manejo de diferentes partes de la PI. De esa forma, tu proyecto enlazaría con la parte de las librerías que necesitaras (si no necesitas red, por poner un ejemplo, no enlazas con la librería que maneja el PHY o la capa TCP/IP). Se parecería bastante a crear un pseudo-sistema-operativo. Cierto es que eso es un currazo infame y que tiene poco que ver con un emulador, que es lo que tú pretendes. En cualquier caso, y reconociendo el mérito considerable que tiene lo que has hecho hasta ahora, al final habría que tirar del compilador de C para la mayoría de cosas. Ni siquiera estoy seguro de que fuera buena idea realmente tirar de ensamblador a las primeras de cambio, que un ARM no es una Z80 en muchos sentidos (algunos de ellos poco evidentes).


El único problema es el teclado USB, para lo demás hay librerías en C que se pueden usar. La gracia de hacerlo en Bare Metal es (desde mi punto de vista) que te lo tienes que currar tú todo. El elegir C o ensamblador ya depende del gusto de cada uno, no hay otras alternativas prácticas para trabajar en Bare Metal. No es mucho más difícil hacerlo en ensamblador, en cualquier otro contexto con acceso fácil librerías sí que es más fácil el C.


Y esas librerías en C que ya existen, ¿donde están?. Tengo curiosidad por verlas. Aunque está muy claro que en tu caso el objetivo era, precisamente, el bare-metal y cualquier otra cosa te quita diversión a raudales. :D

antoniovillena escribió:
ZX-81 escribió:Lo único que me para de adquirir una PI es que yo no tengo tu capacidad (física y mental) como para crearme un teclado ad-hoc como has hecho tú solo para probar el emulador. Eso dejando aparte que tú te apañas bien porque tienes no una, sino dos PI's conectadas entre ellas para desarrollar más deprisa. Pero aún así, la tentación es demasiado fuerte.... :twisted:

Enhorabuena por el proyecto, que ya sigo de cerca. ;)


El teclado no me lo he creado ad-hoc, es un teclado que hice hace un tiempo para probar un clon de spectrum, es idéntico al teclado de un spectrum (a un gomas, no tiene teclas extendidas) por lo que puedes enchufarle el teclado de tu spectrum a la Raspberry sin problemas. He usado ese porque me ocupaba poco espacio, de no tenerlo probablemente habría tirado del DKtronics o de uno de un plus que tengo hecho con pulsadores.

Lo de tener dos Pis conectadas es por el tutorial que te indiqué, pero hay otras opciones: te puedes comprar un cable USB-Serie (cuestan poco más de un euro) o un cable JTAG y no necesitarás dos Pis. Y para cosas muy puntuales se puede desarrollar metiendo y sacando la SD, pero es un coñazo.


Tengo un cable USB a 2 puertos serie, precisamente con un chip de esos FTDI que estos días andan en boca de todos. Lamento decir que, a día de hoy, no tengo ni idea de lo que es exactamente una JTAG. Así que con estos mimbres, ya te imaginarás hasta donde puedo llegar. :(

antoniovillena escribió:El esquema del puerto EAR es éste, es el famoso circuito EAR de Superfo que empleé tanto en el clon de 128 como en el ZX-Uno. Yo por suerte tenía por ahí una plaquita, vosotros os lo tenéis que currar.

Para que durase poco he escogido un juego muy cortito, también lo he probado con otros juegos y en carga estándar funcionan perfectamente. En carga turbo no ha funcionado debido a que no emulo la contención de memoria.


Este es el tipo de cosas que solo están al alcance de unos pocos privilegiados, mcleod_ideafix y uno o dos más de este foro. Los demás, a chupar rueda y a sufrir envidia (sana, pero envidia cochina).
Todo espacio de dimensión finita distinta de cero con producto interno tiene una base ortonormal. Tiene sentido, cuando no piensas sobre ello.
Profesor de Matemáticas U.C. Berkeley

Empieza a jugar sin tener que compilar: JSpeccy
Emulador bare-metal para la Raspberry PI 2/3: ZXBaremulator

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 7 veces

Re: πBacteria, emulador Bare Metal para la Raspberry Pi

Mensajepor antoniovillena » 25 Oct 2014, 16:25

ZX-81 escribió:Aún así es una tarea tremenda. Sigo igual de pasmao que antes... :D


Como curiosidad los registros del Z80 van mapeados a registros del ARM, ya que este último tiene de sobra e implementarlo así es más eficiente que ir leyendo y escribiendo en memoria. Hay instrucciones muy sencillas del Z80 que se emulan con una sola instrucción, por ejemplo RST 0 o todas las LD, sin embargo hay otras muy complicadas como los flags indocumentados y el registro MEMPTR. En conjunto son casi 6000 líneas de core Z80, que parece mucho si las comparas con las 500 del resto del emulador pero que a base de macros y tablas en realidad equivalen a muchas menos (no sé, 3000?).

ZX-81 escribió:Eso es cierto si el objetivo que te planteas es aprender ASM, lo que es tu caso. El emulador solo es la excusa. Y aún así, la ingeniería inversa está al alcance de pocos y, en algunos casos extremos como el chip gráfico, al alcance de casi ninguno.


Para esto hay un monitor de arranque:
https://cowlark.com/piface/doc/stable/doc/index.wiki

La ingeniería inversa es un concepto muy amplio, desde examinar el código fuente del sistema operativo hasta microfotografiar los chips con previo ataque ácido. La ingeniería inversa fácil está al alcance de cualquiera.

ZX-81 escribió:El Proceso de arranque en Linux, de forma resumida, es que carga el núcleo del sistema y entonces se ejecuta el proceso 1 que suele ser /sbin/init (ahora empiezan a cambiarlo por systemctl, pero esa es otra historia). En ese momento, se ha inicializado el hardware pero no se ha configurado nada y no es que tendrías que usar librerías, que no hay todavía, es que tendrías que hacer uso de los servicios del sistema directamente, como si se tratara de la glibc. Es decir, solo está el kernel, proporcionando los servicios más básicos y tu programa. El init es el encargado de ir haciendo el resto de tareas del sistema, de modo que si lo quitas, ni se montan sistemas de ficheros, ni se configura la red, ni se arrancan otros procesos. init se ejecuta con privilegios de root y tienes acceso al scheduler de tiempo real, así que es difícil pedir mucho más. Lo único que no puedes controlar son los threads de kernel que se lanzan automáticamente, pero en ese punto deben ser muy pocos.


Aún así tendrías que conocer bien los threads que se están ejecutando y matar los que no sean importantes. Y el scheduler tampoco te va a atender cuando tú quieras. Incluso corriendo sólo con el kernel cargado hay muchas cosas que pierdes con respecto a Bare Metal como el acceso directo a interrupciones.

ZX-81 escribió:Y esas librerías en C que ya existen, ¿donde están?. Tengo curiosidad por verlas. Aunque está muy claro que en tu caso el objetivo era, precisamente, el bare-metal y cualquier otra cosa te quita diversión a raudales. :D


Incluídas en el propio compilador de C. Son las librerías estándar, las que te muestran algo en pantalla cuando pones un printf. En Bare Metal no puedes hacer un printf, tendrías que inicializar un modo gráfico, cargar una fuente en memoria y crearte una rutina que te pinte pixel a pixel cada letra.

ZX-81 escribió:Tengo un cable USB a 2 puertos serie, precisamente con un chip de esos FTDI que estos días andan en boca de todos. Lamento decir que, a día de hoy, no tengo ni idea de lo que es exactamente una JTAG. Así que con estos mimbres, ya te imaginarás hasta donde puedo llegar. :(


Un JTAG es un protocolo genérico para acceder al hardware de cualquier dispositivo, es como un estándar pero no lo es del todo porque cada plataforma requiere de su cable JTAG específico. Sirve desde para cargar programas hasta hacer depuración en circuito. El cable USB-Serie tendría que ser de estos que se usan para arduinos y cosas así, que funciona a niveles lógicos de 3.3V. Los cables serie para PC, que van a 12V, no valen. Pero vamos que por la marca del chip creo que tienes el cable bueno.

ZX-81 escribió:Este es el tipo de cosas que solo están al alcance de unos pocos privilegiados, mcleod_ideafix y uno o dos más de este foro. Los demás, a chupar rueda y a sufrir envidia (sana, pero envidia cochina).


A poco que sepas de electrónica es un circuito muy fácil de montar. Además son componentes muy básicos que puedes encontrar en cualquier tienda de electrónica de barrio. Si no, puedes decirle a alguien que te lo construya.


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

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