El próximo año voy a dar una clase de microprocesadores de 2 semestres a estudiantes de tercer año de EE. inscribirse en la clase, los estudiantes deben haber completado las clases de programación y sistemas digitales.
Para motivar a los estudiantes con una aplicación en el mundo real de los conceptos enseñados en clase, estoy considerando la posibilidad de realizar tareas a los estudiantes con la creación de un emulador para un sistema anterior desde cero, como un proyecto grupal que se completará hasta el final de la clase (que, como se señaló, tiene 2 semestres de duración).
Estoy intentando elegir un buen sistema de destino para este proyecto, con el objetivo principal de que sea bastante sencillo de emular. Cuantos menos periféricos se emule, mejor. Cuantas menos peculiaridades y errores deban replicarse, también mejor. Estoy buscando exponer a los estudiantes a los conceptos importantes de lenguaje ensamblador, codificación de instrucciones, modos de direccionamiento, registros de CPU, registros de hardware mapeados en memoria, etc., y no necesariamente los trucos requeridos para renderizar sprites lo suficientemente rápido como para hacer un videojuego interesante. con la tecnología de semiconductores que estaba disponible en la década de 1980 a un costo aceptable. Entiendo que esto era necesario en ese momento; solo estoy tratando de encontrar un sistema que no abuse demasiado de estos trucos. Idealmente, el sistema en cuestión no debería requieren emulación de ciclo preciso o trucos como perseguir la línea de exploración.
Un segundo requisito se refiere al rendimiento. Los estudiantes ciertamente no están familiarizados con las técnicas de optimización de software, por lo que tratar de emular incluso la primera Playstation o la Nintendo 64 probablemente se encontrará con problemas de rendimiento (tal vez incluso la SNES y Genesis). En este punto, los estudiantes solo deben preocuparse por implementando el emulador correctamente, no eficientemente. La emulación de CPU ciertamente será implementada por un intérprete, no por un traductor / recompilador.
Finalmente, no creo que los estudiantes encuentren el emulador interesante si, digamos, simplemente mostraba valores de registro después de la ejecución de un programa de juguete (aunque esto haría el proyecto mucho más simple). Me gustaría elegir un sistema para el que se crearon los juegos, incluso si dicho sistema no fuera una consola de videojuegos dedicada. Siento que poder ejecutar juegos en el emulador sería muy motivador para los estudiantes.
Por ejemplo, en este momento estoy mirando el NES , pero todavía se siente un poco complicado, especialmente el PPU. ¿Hay opciones más simples?
Comentarios
- Pregunta interesante. Podría ser importante agregar una petición de respuestas para mantenerse alejado de las peleas habituales sobre el mejor sistema / cpu / vdu / etc. y centrarse en la parte didáctica.
- Hay una aparente contradicción en la pregunta. en un punto, el autor quiere concentrarse en la emulación de CPU, en el otro punto, también quiere que todo el sistema emulado emule imágenes y sonido. Si bien la solicitud de este último es comprensible, conduce a un trabajo igualmente duro en emulando los periféricos, mostrando imágenes y reproduciendo tareas de sonido.
- Recurso posiblemente útil suponiendo que termine siendo una máquina Z80 en lugar de una 6502: z80.info/decoding.htm sobre la decodificación algorítmica de instrucciones Z80 (sujeto a un montón de casos especiales, pero ahí está). ¿Requerir un emulador realmente decodificar algorítmicamente en lugar de buscar restringiría la capacidad de los estudiantes para copiar y pegar, además de ser relevante para un curso de microprocesadores?
- Puede que esto no sea lo que está buscando, pero tal vez en lugar de escribir un emulador (que ‘ m suponiendo que se ejecutarán en su PC), podrían demostrar el mismo conocimiento conceptual trabajando con hardware real. Pídales que obtengan una placa de desarrollo basada en ARM Cortex M4, aprendan a trabajar con el metal desnudo.
- ¿tal vez TI-83 …?
Respuesta
Estoy adelantando CHIP-8 .
Este sistema está esencialmente una máquina virtual desarrollada por alguna razón. Hay juegos escritos para el CHIP-8. Tiene algunos códigos de operación, una pila, un par de temporizadores y una pantalla de mapa de bits de baja resolución, pero es lo suficientemente simple como para que los primeros los emuladores caben en unos pocos kilobytes en las primeras computadoras de 8 bits.
Hay más de unas pocas implementaciones de referencia que puedes usar.
Hay juegos, etc., que están en el público dominio ya, como aquí para que no necesites proporcionar tus propios juegos.
Comentarios
- Ayy para Chip 8. Es ‘ s fáciles de encontrar implementaciones en muchos idiomas y la arquitectura es simple.
- CHIP-8 es una gran idea para una introducción a emu lación por su sencillez.Habiendo escrito un emulador de NES antes, puedo decirles que escribir la CPU consumía mucho tiempo y era tedioso, y el 6502 es simple en lo que respecta a las CPU. Por el contrario, CHIP-8 solo tiene 35 instrucciones muy simples. Además, muchos sistemas se basaron en comportamientos de tiempo precisos entre la CPU y el resto del hardware, mientras que CHIP-8 no tiene tal requisito.
- Los comentarios no son para una discusión extensa; esta conversación ha sido movida al chat .
- Yo ‘ soy un programador experimentado, pero Nunca escribí un emulador. Después de esta respuesta, pensé: » Oye, este chip8 parece bastante fácil, ‘ pasaré unas horas en él «. Tres semanas después, ‘ todavía estoy aquí tratando de averiguar por qué los programas siguen saltando sin espacio de memoria. Mucha diversión, también mucha » qué diablos «.
- Me pregunto si habría habido impedimento para eliminar la espera vblank de la rutina plot-sprite y agregar una instrucción vblank-wait explícita? El CDP1802 no es ‘ un demonio de velocidad, pero es casi seguro que podría dibujar más de un sprite por cuadro en ausencia de la espera vblank.
Respuesta
Oh. Buena pregunta. Intentaré dar algunas pistas, pero consideraría que el problema es demasiado amplio para ser respondido aquí en lugar de una conversación más significativa. No obstante:
[…] encargar a los estudiantes la creación de un emulador para un sistema anterior
Muy bueno.
desde cero,
Si se supone que esto es realmente desde cero y en software, realmente no considéralo una tarea apta para estudiantes de primer año en un tiempo tan limitado. A menos que haya una manera de eliminar los requisitos de tiempo real (que son aún más relevantes para los juegos), prefiero tener cuidado.
De hecho, ya que se trata de EE, ¿por qué no hacer hardware real? Todavía es fácil conseguir (algunas) CPU clásicas y dispositivos relacionados. Combinado con una pantalla LCD moderna, el esfuerzo de hardware es bastante factible en unas pocas semanas con gran detalle.
como un proyecto grupal que se completará hasta el final de la clase (que, como se señaló, tiene 2 semestres de duración).
¿Cuál podría ser la condición más estricta?
Estoy tratando de elegir un buen sistema de destino para este proyecto, con el objetivo principal de que sea bastante simple de emular. Cuantos menos periféricos se emulen, mejor. menos peculiaridades y errores que necesitan ser replicados, también mejor.
Suena como un buen intento. Y lo más importante es que elimina algunos sistemas aparentemente simples (como singleboarders) de la lista, ya que dependen de un manejo complejo de dispositivos de E / S (como el acceso en tiempo real a los puertos para controlar los segmentos LED de manera aparentemente continua).
Estoy buscando exponer a los estudiantes a los conceptos importantes de ensamblar ly lenguaje, codificación de instrucciones, modos de direccionamiento, registros de CPU, registros de hardware mapeados en memoria, etc.
Algo que se puede hacer con un hardware real como así como una emulación, ¿no es así?
Idealmente, el sistema en cuestión no debería requerir una emulación con precisión de ciclo o trucos como perseguir la línea de exploración.
Junto con el requisito implícito para una salida de video, esto requiere una lógica simple de mapa de bits no acelerada.
Un segundo requisito se refiere al rendimiento. Los estudiantes ciertamente no están familiarizados con las técnicas de optimización de software, por lo que tratar de emular incluso la primera Playstation o la Nintendo 64 probablemente se encontrará con problemas de rendimiento (quizás incluso la SNES y Genesis).
No temería mucho aquí, ya que el hardware de PC real es bastante rápido. Los problemas reales aquí no son la velocidad de la emulación, sino los aspectos en tiempo real (sincronizar varias partes de la emulación) que requieren un diseño de software muy cuidadoso y afinado. No era de esperar aquí. Toda la parte de «correr el rayo» que mencionaste.
En este punto, los estudiantes solo deben preocuparse por implementar el emulador correctamente, no de manera eficiente. La emulación de CPU ciertamente será implementada por un intérprete, no por un traductor / recompilador.
Aún así, incluso para los más primitivos, la sincronización en tiempo real es necesaria para jugar un juego. Al menos una sincronización de retroceso de pantalla es imprescindible, no al menos para cambiar la velocidad de la simulación en sí.
La necesidad inherente de los juegos de utilizar efectos de tiempo, y la manipulación sincronizada de la pantalla en un nivel más fino que los fotogramas, es algo que hará que ejecutar cualquier juego del mundo real en el emulador propuesto sea un desafío.
Me gustaría elegir un sistema para el que se crearon los juegos, incluso si dicho sistema no es una consola de videojuegos dedicada. Siento que poder ejecutar juegos en el emulador sería muy motivador para los estudiantes.
Estoy totalmente de acuerdo aquí. Gran parte del éxito de los sistemas de aprendizaje y experimentación de Andre LaMothe se basa en la principal habilidad para hacer juegos.
Por ejemplo, ahora mismo estoy viendo la NES, pero todavía se siente un poco complicado, especialmente la PPU. ¿Hay opciones más simples?
Se pone difícil ya que los requisitos básicos se contradicen entre sí. Solo las consolas / computadoras exitosas obtuvieron una gran selección de juegos, pero estos también tienen una estructura de hardware más compleja que permite grandes juegos.
Veamos algunos sistemas bien conocidos. Me gustaría separarlos en Sistemas «simples» y «complejos» a lo largo de la complejidad de su lógica de video (* 1)
Sistemas simples
En la primera iteración, estos son todos sistemas sin un VDC / CRTC dedicado.
-
Atari VCS – eventualmente el último sistema para ser usado para aprender ensamblador, trabaja en un nivel básico extremo sin intermedios y sin mucho que cuidar. Al mismo tiempo «es el homónimo del término» correr el rayo «.
Dicho esto, aún puede ser un sistema a buscar, ya que las partes que dependen del tiempo están bien definidas y (en comparación con cualquier otro video) extremadamente simple y fácil de emular, excepto que no es material para estudiantes de primer año. Además, está extremadamente bien documentado en fuentes generales disponibles.
-
Commodore PET: un sistema bastante simple, especialmente desde toda la parte del video se puede emular de manera bastante abstracta, pero los VIA deben ser, al menos en parte, emulados. Lo más importante es que contiene solo dos fuentes de tiempo (además del reloj).
Una gran ventaja para el PET (y los seguimientos) es la buena documentación (también debido a su simplicidad). Además, si bien cuenta con un CRTC, casi ningún juego (u otro software) hizo uso de reprogramación en absoluto, lo que hace posible una emulación simple e incompleta (abstracta).
En la parte posterior, hay solo una pequeña cantidad de juegos y la mayoría de ellos están escritos en BASIC, lo que puede requerir cierta investigación para encontrar la cantidad de abstracción frente a los detalles en la emulación.
-
Apple II – Una vez más, un increíble sistema bien documentado con mucho software. Gran parte de ella se basa en ensamblaje. Si bien el hardware está completamente documentado y construido solo a partir de TTL, su funcionamiento no es realmente simple y dado que algunos juegos dependen en gran medida de peculiaridades y bucles de conteo para la sincronización exacta, la emulación puede volverse mucho más complicada de lo que se asume a primera vista.
Una ventaja para ti podría ser que Apple II era bastante popular en Brasil (bueno en ese entonces).
-
TRS-80 – Aquí también la lógica del video se construye a partir de TTL pero es mucho más simple que en Apple. Otras E / S similares son bastante simples. En el lado negativo hay de nuevo un número bastante pequeño de juegos.
Hasta ahora, los antiguos reales, pero también algunos sistemas posteriores, pueden clasificarse como simples:
-
Sinclair Spectrum – Si bien la lógica ofrece algunos trucos, campanas & silba, es un diseño de mapa de bits en mosaico sencillo. Hasta ahora, las posibilidades son buenas para una emulación, excepto que, como es habitual, los juegos dependían mucho del tiempo, algo que complicaba la emulación de nuevo.
Al igual que con Apple II, hubo bastantes clones en Brasil .
-
Se puede hacer un caso similar para la familia ORIC
-
Atari ST: puede ser una sorpresa desde el punto de vista actual de vista, pero el Atari ST no contaba con ningún hardware de video sofisticado. Solo 3 resoluciones de gráficos y un CLUT de 9 bits para hasta 16 colores concurrentes. Algunos puntos de sincronización y un solo temporizador. Además de una CPU más moderna y un chip de sonido dedicado. Suena como una combinación hecha en el cielo, si, bueno, si no fuera para los programadores de juegos nuevamente. Aquí también, el software implicaba una gran cantidad de trucos para crear juegos increíbles (* 2).
Una primera conclusión para los sistemas «simples» es que, si bien el hardware puede ser menos complejo, el software hizo un gran esfuerzo para superar esto. En consecuencia, puede Hay que decir que los sistemas menos complejos no necesariamente hacen que una emulación sea menos compleja, ya que no se va a emular más hardware diferente, pero el hardware simple debe seguirse muy de cerca en el tiempo para hacer que el código del juego existente se ejecute.
Sistemas complejos
Estos son, en general, todos los sistemas con un VDC sofisticado
-
9918 y sigs. .- No se trata tanto de un solo sistema, sino del VDC utilizado más comúnmente (TI lo llamó VDP). Aunque fue concebido para el TI 99/4, TI lo vendió a cualquiera que estuviera interesado. Como resultado, la mayoría de todos los sistemas (* 3) que utilizan un 9918 o uno de sus diseños posteriores (9928/38/58 / …).
Consolas de juegos como Coleco Vision , Sega SG-1000 hasta el Master System así como computadoras desde TI 99/4 o Memotech MTX hasta el todo el mundo de máquinas MSX usó esta familia.
Suena genial, ¿no es así? Bueno, seguro que hay muchos juegos para usar. Además, un VDP de este tipo ayuda a simplificar la emulación, ya que ofrece una clara separación entre la CPU y la pantalla y limita los «trucos» que puede utilizar un juego a lo que ofrece el VDP, que a su vez está claramente definido. Y nuevamente, es el software existente lo que dificulta la emulación, ya que, nuevamente, por supuesto, los programadores usaron trucos de sincronización para manipular la pantalla en el momento adecuado. ¿Alguien mencionó «Racing the Beam»?
-
Commodore VC20, C64, C16, etc. – Lo mismo ocurre con todas las computadoras domésticas Commodor. Si bien se diferencian en complejidad por tener sprites o no, ofrecer temporizadores o no y sonido o no, lo básico El problema es el mismo que con la familia 9918: Software que usa ciertas situaciones de sincronización para crear efectos de juego.
-
6847 Systems – Tandy CoCo, Matra Alice y similares presentan el mismo problema.
Podría continuar con sistemas de juego como NES o MegaDrive, pero terminaré esa lista aquí, ya que el principio debería estar claro a estas alturas: mientras que algunos sistemas pueden parecer como Más complejo de emular, el problema real no es la complejidad del hardware de video, sino siempre que un programador «mejora» lo que se puede hacer mediante una programación inteligente (* 4). Entonces, el problema real de tu proyecto no es (tanto) el hardware (* 5), sino el software, especialmente los trucos y herramientas que se usan en los juegos reales existentes. .
Eso es especialmente malo, ya que quieres usar (como lo leo) los juegos existentes como motivación. No habrá muchos que se ejecuten en una emulación en tiempo real menos difícil.
Reducir esta dependencia reducirá la cantidad de juegos que se ejecutan correctamente. Reducirlo a un nivel que permita manejarlo en un curso de tiempo limitado hará que sea casi imposible encontrar juegos adecuados.
Conclusión: Encontrar el el equilibrio correcto es una forma, pero que requerirá una investigación considerable y, al mismo tiempo, limitará la usabilidad.
Ahora, tal vez sea posible atacar esto desde un ángulo ligeramente diferente. Probemos algunos:
-
Uso de hardware antiguo existente:
Si bien está probado (* 6) que funciona, ofrece la mayor compatibilidad y facilidad de uso debido a los entornos de desarrollo abiertos, es posible que pierda el atractivo de «construir» para los estudiantes de EE.
-
Utilice sistemas de juegos educativos existentes:
Sistemas como Andre Las XGS de LaMothe son excelentes herramientas para sumergirse en la creación y programación de hardware detalladas. Claro, se requiere algo de soldadura (hay compilación lista disponible), son sistemas definidos por software casi completos, documentados y ofrecen una enorme biblioteca de juegos. Sin mencionar sus libros sobre programación de juegos.
Una gran ventaja es que los estudiantes pueden llevarse el sistema a casa y jugar incluso después de que el curso haya terminado.
-
Cree su propio sistema simple:
Tome una CPU clásica (6502 por ejemplo), algo de RAM, FLASH y una VIA más una FPGA para implementar un CRTC muy básico y listo. Los estudiantes lo soldarán, podrán aprender sobre los componentes y su interacción, incluido el uso de FPGA (que podría ser imprescindible hoy en día) y luego ejecutarán su software en hardware real. Incluso con números pequeños, debería ser posible producir una tabla de este tipo en torno a 50 euros o menos. Al igual que la idea de XGS, «funcionará una vez finalizado el curso, incluida la sensación de pertenencia como su sistema.
Por supuesto, los estudiantes tendrán que escribir sus propios juegos, pero los juegos simples se pueden hacer en un tiempo bastante corto, sin mencionar que los cursos de seguimiento también pueden usar juegos que la clase anterior escribió.
-
Haz una emulación de «tu propio» sistema
Al igual que antes, excepto que todo es virtual. Tiene la ventaja de ser un pozo sistema definido y cerrado, especialmente uno donde no hay limitaciones debido a una emulación menos «perfecta» – la Emulación es perfecta por definición y todas sus peculiaridades son las que tiene el sistema La desventaja es nuevamente la parte del Software.
-
Utilice hardware «suave»:
Hay un proyecto de Neil Franklin que crea una serie de componentes de sistema generalizados muy parecidos a los que tenían las computadoras clásicas, pero utilizando microcontroladores en lugar de chips dedicados. Combina emulación con hardware real. Si bien los componentes todavía se desarrollan como emulación, están diseñados para ejecutarse en un microcontrolador y usarse de manera muy similar a los chips «reales». Un sistema puede configurarse utilizando un módulo SoftCPU que emule, por ejemplo, un 6502 con algo de RAM y ROM, combinado con un SoftVGA que proporcione una interfaz de video como terminal y un SoftPS2 que emule el teclado y el mouse. Todos están conectados a través de un bus paralelo o en serie (SPI) que permite la adición de otros componentes que también se pueden presentar a la emulación.
Además de tratarse de emulación, cuenta con una cantidad limitada de hardware que se puede hacer en una placa de pruebas (aún así, nunca es demasiado temprano para comenzar a soldar), también muestra una tarea bastante típica de la ingeniería actual, reemplazar la lógica tradicional por microcontroladores, en el uso práctico.
El El resultado es un sistema que ofrece el tacto y la sensación de una computadora real (antigua) mientras se construye con hardware moderno que ejecuta emulaciones en paralelo.
-
Uso de un emulador configurable:
No, no se trata de MAME o algo similar, sino de un marco de emulador escrito en JavaScript, que maneja las partes genéricas (incluido el tiempo), donde sus estudiantes agregarán sus emulaciones (que era un objetivo, ¿no?) para formar un sistema completo. Dado que JS se entrega en el código fuente, incluso el Framework en sí puede modificarse.
Dependiendo de la calidad de cada emulación, esto puede ser utilizable para cualquier cosa, desde un simple sistema de demostración hasta una recreación completa de los años 80. computadora.
Entonces, ¿quizás algunas de las variaciones anteriores pueden ser un buen comienzo?
* 1 – Me enfocaré solo en video (y CPU) para que sea sencillo. Además, el video solo ya funcionará bien para eliminar los sistemas completos. El sonido agregará otra dimensión y puede complicarlo mucho más allá del alcance de esto.
* 2 – Solo eche un vistazo a Xenon. Un desplazador vertical innovador con múltiples capas cambiantes, muchos objetos animados, todos funcionando de manera súper fluida en el software. De hecho, estaba tan bien afinado que trasladarlo al Amiga (generalmente) más capaz (en cuanto a gráficos) tomó bastante tiempo y resultó en un juego algo menor.
* 3 – Sistemas diseñados no necesarios unidades vendidas. Por otra parte, algunas consolas de juegos fueron más que exitosas, por lo que incluso pueden obtener la mayoría en números.
* 4 – Las publicaciones de blog del desarrollador principal de El complemento de renderizador Glide64 para emuladores N64 ha escrito una serie de varias partes ( Intro , P .1 , P.2 , P.3 ) de entradas de blog sobre los obstáculos que tuvo que superar para hacer que la parte de la emulación de video funcionara; no todos ellos sobre la complejidad de emular el hardware, sino todas las formas en que la CPU modificó y modificó la salida junto a la lógica del video. Esto es aún más notable considerando que el N64 ya es un sistema bastante absract y cerrado.
* 5 – De hecho, consideraría un hardware de video más complejo como una gran lección para los estudiantes de EE, ya que muestra bien lo que se puede hacer con unas pocas puertas en lugar de montones de software, incluso más cuando están a punto de hacer hardware más adelante, ¿no es así?
* 6 – Stefan Höltgen en FU Berlin, por ejemplo, usa viejos sistemas de juego en sus clases para presentar a los estudiantes (no EE) el hardware real y la programación real y su implicación para las tareas (y juegos) de cada día.
Comentarios
- @Tommy Bueno, me encantaría evitar esto, ya que no hay una respuesta fácil. Lo más importante aquí podría ser que, mientras que el Z80 es algo » peculiar «, el 68k es todo menos simple. Con todas las palabras de extensión (hasta CPU32), una sola instrucción puede tener hasta 11 palabras (22 bytes) y decodificarlas es un desastre. Por otra parte, todo depende de la forma en que se compone el emulador. El Z80 es un 8080 frontal bastante sencillo, fácil de emular, con algunos modificadores, que se pueden manejar fácilmente. Para el 68k, incluso solo el original, será mucho más trabajo.
- » tarea apta para estudiantes de primer año en un tiempo tan limitado. » Dijo que estos son estudiantes de tercer año, no de primer año, y ‘ ya han completado varios requisitos previos.
- @ wizzwizz4 Bueno, no importa cuál sea nuestra opinión personal, JS es el heredero legal de BASIC. ¡Serio y en todos los sentidos! Solo piensa en ello.No sólo se ejecuta n junto a cada computadora real, sino que ‘ incluso está instalado de forma predeterminada, y no hay forma de deshacerse de él sin perder mucha funcionalidad. Aún más, piense en la cantidad de software increíblemente lento y malo que se escribe en JS: la prueba perfecta, ¿no es ‘ verdad?
- @Raffzahn It ‘ s completamente diferente Por un lado, BASIC tenía varios implementos incompatibles … ¡Ohhh! ¡Es el sucesor de BASIC!
- Ellos ‘ todavía no son estudiantes de primer año, que son estudiantes de primer año. Y creo que debería darle al OP el beneficio de la duda de que él no ‘ no asignará el proyecto si los estudiantes no ‘ los antecedentes requeridos.
Respuesta
Hasta ahora hay algunas buenas ideas.
Pero algo a considerar.
Si haces algo como una máquina CP / M, son realmente bastante básicos y simples, especialmente porque todo está aislado no solo por la BIOS, sino también por la naturaleza IN / OUT de la familia 8080 / Z80.
No me parece desagradable que una máquina CP / M sea el objetivo del primer semestre. (No conozco su programa de estudios)
Pero, por ejemplo, una máquina CP / M básica no necesita precisión de ciclo, no necesita interrupciones, lo más complicado que tiene que hacer es sondear el teclado para ver si se ha presionado una tecla. (A diferencia de monitorear keydown y keyup o cualquier otra cosa).
Luego, en el segundo semestre, puede agregar los requisitos como la interfaz a un chip gráfico. La instancia anterior del SG-1000 podría ser fácilmente una máquina de CP / M en el primer semestre, y luego transformarse fácilmente en el SG-1000 en el segundo (ya que «tienes la parte Z80 completa en el primer semestre) .
Finalmente, creo que le conviene a su clase tener un programa de aceptación que los estudiantes puedan ejecutar para verificar su CPU. Pocas cosas más emocionantes que depurar una CPU defectuosa, especialmente con el lenguaje de máquina con el que puede que no esté familiarizado .
La comunidad 6502 tiene programas de prueba que pueden comprobar que una CPU ejecuta todas las instrucciones correctamente, no estoy seguro de qué hay disponible para las otras CPU.
Y si Es un consuelo para el alcance, escribí tanto un simulador como un ensamblador asociado de vez en cuando durante las vacaciones de Navidad de 2 semanas, si eso te ayuda sobre qué tan grandes son los proyectos reales. Las CPU básicas son bastante simples.
Comentarios
- En el Z80, FUSE proporciona pruebas, aunque no todas son genéricas o necesariamente correctas en cuanto al ciclo exacto sincronización; también ‘ están en un formato de texto ad hoc, pero ‘ los he transcrito a JSON: github.com/TomHarte/CLK/tree/master/OSBindings/Mac/… : utilice tests.in.json para establecer estados iniciales y descubra cómo durante el tiempo que debe ejecutar, luego tests.expected.json para verificar los resultados. También hay ‘ s zexall y zexdoc, originalmente archivos CP / M pero ampliamente adaptados y muy lentos. Pasar el primero requiere un montón de cosas indocumentadas para ser correcto, pasar el segundo no ‘ t.
- … y lo único que ‘ que alguna vez encontré para el 6809, suponiendo que alguien estuviera pensando en sugerir un Vectrex o Coco / Dragon, está contenido dentro de un conjunto de pruebas de máquinas recreativas Williams más amplio en seanriddle.com/wetsold.html . Para el 6502 estoy muy de acuerdo con las pruebas de Klaus Dormann, Wolfgang Lorenz y AllSuiteA, todas las cuales parecen ser mucho más prominentes que las pruebas Z80 o 6809.
- @Tommy En cuanto a ‘ soy consciente de que todas las pruebas de Fuse ‘ son precisas en cuanto al ciclo. Por favor, presente los errores si ‘ no 🙂
- @PhilipKendall vea mi correo electrónico del 29/5/2017 para fusionar-emulador-devel re: DJNZ y si el desplazamiento se lee en una iteración final. La conclusión de Alan Cox sobre si el comportamiento probado de FUSE ‘ es correcto fue que ‘ es » abierto a interpretación » según las fuentes disponibles. Entonces pensé que » no necesariamente correcto » era justo. Sin embargo, probablemente debería haber sido claro: encontré solo un puñado de desviaciones en la interpretación de la evidencia de su equipo ‘ y en la mía. Disculpas por la mala forma en eso.
- @Tommy – » Conclusión de Alan Cox sobre si FUSE ‘ s probado El comportamiento es correcto era que ‘ s » abierto a interpretación » según el fuentes » …Aunque tengo mucho respeto por mucho de lo que hace Alan, es ‘ bastante fácil verificar si el comportamiento probado es el mismo que el de una CPU Z80 real (especialmente para las versiones CMOS que se puede ejecutar en la placa de pruebas con velocidades de reloj bajas para configurar pruebas detalladas de manera muy simple), por lo que este es definitivamente un caso en el que si cree que hay ‘ algo mal, debería estar capaz de demostrarlo muy fácilmente.
Respuesta
¿Puedo sugerir el SG-1000 ?
El sistema es poco más que una agrupación de tres chips estándar: el Z80, el TMS9928A para gráficos y el SN76489 para sonido, con los controladores como grupos tontos de interruptores NO (normalmente abiertos).
En software o hardware, puede simular o emular cualquier parte de esto de forma aislada o en conjunto para producir el sistema completo.
El El sistema utiliza ROM simples no conmutadas por banco para sus juegos, y normalmente No confíe en trucos tales como interrupciones en la mitad de la pantalla o recuento de ciclos para producir sus efectos. Solo un mapa de mosaicos y varios sprites en la parte superior. Sugiero que esto es mucho más sencillo que un sistema que contiene muchos componentes internos que interactúan y cartuchos inteligentes como el NES.
Debería proporcionar sus propios juegos para emular en lugar de distribuirlos sin licencia. material protegido por derechos de autor, por supuesto.
Comentarios
- … y, para el registro, ColecoVision es exactamente la misma colección de componentes, con diferentes conexiones lógica y joypads un poco más complicados. Por lo tanto, un emulador SG-1000 suele ser fácil de ampliar para admitir ambos.
- También cabe destacar que el 9918 es un chip complejo, con sprites, modi complejos y datos, como él no ‘ no quiero usar. ¿No es ‘?
Respuesta
Un simple, Una computadora sencilla como la ZX Spectrum suena razonable, pero simplemente hay demasiados emuladores buenos para que esta sea una opción útil. También creo que el 6502 es más fácil de emular.
Entonces, una posible opción podría ser el sistema Oric-1 o Atmos by Tangerine , que usaba una memoria 6502 no almacenada, sin chips personalizados, excepto video simple, y un búfer de cuadros relativamente sencillo. Tampoco es tan conocido como el Spectrum, aún así, hay software (juegos) disponible para traer algunas pruebas de compatibilidad simples (creo que un cierto «sentido de logro» es extremadamente importante para los estudiantes). Ya hay varios emuladores disponibles para Atmos (tres, que yo sepa), pero su número es limitado, lo que hace que sea fácil averiguar si alguien hizo trampa y simplemente copió el código.
Ninguno de los Los juegos Oric eran tan sofisticados que yo supiera que necesitarías una emulación 100% exacta del ciclo para ejecutar los juegos,
Comentarios
- I ‘ d argumentan que la arquitectura Oric desalienta las carreras ráster al no tener un canal lateral de registros de control de video y al no estar configurada para que las carreras puedan aumentar la resolución de color (en contraste con un Spectrum). Sin embargo, si solo tuviera dos búferes HIRES, ‘ lo afirmaría con más confianza. ¿Estás de acuerdo con eso?
- @Tommy I ‘ no estoy muy familiarizado con los circuitos de video de Oric. Lo que diría en cualquier caso es que el Oric tuvo una vida tan corta y una base de usuarios tan limitada que las técnicas sofisticadas para modificar el video como sabemos por el ZX Spectrum no eran ‘ t desarrollado (al menos no durante la vida activa de la computadora, hay ‘ una serie de demostraciones interesantes aquí demozoo.org/platforms/ 49 )
- Oh, entonces ‘ proporcionaré un mejor razonamiento: el chip de video Oric tiene un estado modal, incluido el modo de texto o gráficos, pero no registros expuestos. Todo se establece mediante bytes de control dentro de la transmisión de video, incluidos los atributos de primer plano y de fondo. La gente tiende a quejarse de eso porque significa que si desea gráficos sin espacios, ‘ está limitado a cuatro colores por línea, dos de los cuales son complementos bit a bit de los otros dos. Sin embargo, algunos de los juegos modernos todavía se ven muy bien, por ejemplo, Stormlord youtube.com/watch?v=QSDy-BC580M
- @Tommy Los atributos de serie hacen que la programación sea un poco más complicada, yo ‘ Supongo que, pero la cantidad de conflicto de atributos es incluso mejor que en el ZX Spectrum, creo.
- Xenon 1 necesita un ciclo exacto, o de lo contrario se bloquea cuando la nave explota (descargo de responsabilidad: escribí un emulador oric para la amiga llamado amoric y encontré este problema, pero solo en este mismo juego)
Responder
Según sus criterios y la necesidad de mantener el proyecto interesante para sus alumnos, recomiendo considerando seriamente el Vectrex Arcade System, que fue vendido por Milton Bradley a principios de la década de 1980.
Debido a que el Vectrex es único en el uso de una pantalla vectorial, en lugar de una pantalla raster, no requieren que se emule cualquier hardware de video complicado. La pantalla es administrada por la CPU, y la pantalla en sí es simple de emular en un sistema moderno y con buen rendimiento.
Además de emular la pantalla vectorial, la CPU ( Motorola 6809) y el chip de E / S (MOS 6522) no representan demasiado h de un desafío ya que son partes simples de 8 bits que están muy bien documentadas.
El modelo de memoria también es muy simple sin esquemas bancarios que yo conozca. Hay un chip de sonido PSG común en el Vectrex, pero emularlo podría considerarse como «Crédito extra».
A diferencia de otras consolas de juegos simples de principios de la década de 1980, los juegos de Vectrex se han mantenido bastante bien, dado que su capacidad para renderizar gráficos monocromáticos suaves, incluido el marco de alambre 3D. Esto se evidencia aún más por la popularidad del desarrollo moderno «home brew», en el que los desarrolladores continúan creando nuevos juegos Vectrex.
Una ventaja final para Vectrex es que la ROM del sistema original se puede distribuir libremente.
Comentarios
- Excepto, el vectrex también funciona bien con el ‘ Racing the Beam ‘ categoría, ¿no ‘ no es así?
- @Raffzahn, según tengo entendido, la CPU Vectrex controla el haz de electrones: exactamente lo opuesto a una situación » corriendo el haz » en la que el software necesita realizar cambios de estado sincronizados con precisión manténgase al día con una pantalla de escaneo ráster temporizado externamente.
- @Mark It ‘ es lo mismo con el VCS. Aquí también el haz es controlado por la CPU. Sin que la CPU acceda a WSYNC en cada línea y antes de que termine la línea, la pantalla parpadeará. Y por lo que entiendo el OP, ‘ se trata exactamente de no recrear un sistema con estrictos requisitos de tiempo, que son esenciales para Vectrex.
- @Raffzahn: La CPU en el VCS controla la vertical, pero no controla la horizontal. No es ‘ inusual que un juego produzca docenas o incluso cientos de líneas de exploración sin un WSYNC intermedio. En ausencia de un WSYNC, el rayo estará en la misma posición horizontal cada 76º ciclo. Almacenar WSYNC es a menudo la forma más fácil de esperar a que el rayo alcance el lado derecho de la región mostrada, pero ‘ no es la única forma. Un programador que estuviera tan inclinado podría explotar los intrincados detalles del movimiento y los comportamientos de los sprites para escribir un juego que nunca usó WSYNC en absoluto.
- Amigos, estamos hablando de un emulador aquí. No habrá ningún problema con el desvanecimiento de los fósforos mientras la CPU emulada tarda demasiado en dibujar el siguiente fotograma. No hay » haz » y ciertamente no hay razón para que el emulador necesite » race » ya que la pantalla del emulador permanecerá bastante estática el tiempo que sea necesario entre marcos.
Responder
Crear un emulador desde cero es una tarea relativamente enorme, especialmente para estudiantes sin experiencia, y podría resultar problemático. Así que realmente debes tener cuidado con qué plataforma emular y qué información compartir / usar. Para mí, la mejor opción es una plataforma ZX 48K ya que estaba creciendo en ella y estoy familiarizado con su funcionamiento interno, así que la respuesta estará sesgado por eso … Pero debemos tener en cuenta que hoy en día los estudiantes generalmente no lo veían / usaban / sabían tanto como nosotros … Lo que necesitas lograr es:
-
emulación correcta de iset de CPU
incluso si hay toneladas de documentos de conjuntos de instrucciones Debe tener cuidado, ya que por ejemplo en Z80 el 99,99% de ellos contienen errores. Por lo tanto, debe elegir un conjunto de referencia probado para ellos, ahora es correcto (o al menos básicamente funcional).
Por ejemplo, aquí está el iset mío Z80 pasando ZEXAL con 100% de éxito:
La plataforma Z80 tiene una gran ventaja y es que existen extensos probadores como ZEXALL Ejercitador que puede ayudar mucho a depurar el emulador.
Creo que también hay versiones para
i8080
pero no conozco ninguno de esos probadores para diferentes familias de CPU. -
Temporización
Bueno, para la emulación básica, el método de tics de reloj (o estrangulamiento) es suficiente, que es bien conocido y utilizado … No veo ningún problema aquí. Hoy en día, las computadoras tienen una resolución relativamente buena para la sincronización (en PC: RDTSC, en Windows PerformanceCounter, …).
El emulador básico puede ignorar la CONTENCIÓN de la plataforma emulada, pero tenga cuidado con algunos sistemas operativos / juegos / aplicaciones. quedar inutilizable si no se emula correctamente. Esto no se aplica solo a las demostraciones. El tiempo habitual en las computadoras antiguas se derivó de alguna interrupción (generalmente actualización de video) y un número limitado de ciclos en los que se pudo ejecutar antes. Pero con la contención, el número de instrucciones ejecutadas durante el mismo tiempo puede ser muy diferente y algunos programas pueden desbordarse y dañarse o congelarse. La CONTENCIÓN es lo más difícil de implementar con los tics de reloj, por lo que debe evitarlo a toda costa … Por otro lado, con los tiempos de nivel MC es realmente fácil y solo unas pocas líneas de código.
-
Sound
Este es un problema que depende de la plataforma y debe elegir la API utilizada para entrada / salida de sonido correctamente. Por ejemplo, en Windows, la única opción utilizable es WAvEIN / WAVEOUT debido a su baja latencia y su fácil uso. DirectX no se puede usar (al menos en el momento en que estaba tratando de usarlo para tal tarea) debido a ALTAS latencias y no funcionan las devoluciones de llamada.
Usaría un enfoque con búfer en lugar de la conducción directa del altavoz para que su emulación pueda ser explosiva el tiempo de ejecución en lugar de ejecución correcta del nivel MC (lo que hago de todos modos, pero dudo que los estudiantes puedan hacerlo en el momento actual).
-
Video
Este también depende de la plataforma. .. y debería utilizar API con la que sus alumnos estén familiarizados. Incluso el seguimiento de haces es relativamente fácil de implementar con un mapa de bits simple … En computadoras como ZX, el orden de Scanline tiene un significado especial y puede distraer mucho a los codificadores novatos, por lo que es mejor usar tablas LUT de traducción que convierten entre dirección y coordenada y hacia adelante y hacia atrás.
La mayoría de las plataformas más antiguas usaban una frecuencia de actualización de 50Hz / 60Hz y una resolución relativamente pequeña, por lo que hoy en día las computadoras, incluso con una emulación no bien optimizada, deberían ser lo suficientemente rápidas para ello. Si no, omitir marcos también es una opción …
-
otros HW y periféricos
El mínimo absoluto es la memoria RAM / ROM y el teclado. La memoria suele ser muy fácil, solo una matriz estática y / o algunas cosas de cambio de página … El teclado se puede emular configurando E / S de acuerdo con las teclas presionadas. La E / S también se puede mapear en memoria a alguna matriz al igual que la memoria. Capturar la rutina ISR también es una opción, pero eso hace que el teclado sea inutilizable para los manejadores de teclas personalizados.
No me molestaría con los periféricos FDC, AY, etc., ya que el emulador debe mantenerse lo más simple posible. Pero si tiene suerte, es posible que algunos estudiantes estén muy por delante de otros con este proyecto. Para aquellos a los que podría sugerirles que implementen funciones interesantes como FDC, DMA, incluso sonido de tarjeta de sonido real (para cintas reales o cualquier reproductor de audio) que habilita muchas características interesantes, por ejemplo, consulte:
-
Archivos
Yo optaría por los formatos de archivo Z80 / SNA en Usar TAP / TZX es bueno, pero desde el principio el emulador tendría bastantes errores, por lo que es posible que las rutinas de carga no funcionen correctamente, lo que dificulta mucho el uso y la depuración.
-
ROM
esta es la parte más problemática, ya que muchas ROM de plataforma aún no son gratuitas y al extraerlas / descargarlas / usarlas para emulación, puede arriesgarse a problemas legales.
A partir de algunos comentarios aquí, parece que las ROM ZX son de dominio público ahora … y también hay ROM comentadas pri nts que hacen que sea mucho más fácil depurar los primeros pasos del emulador (cuando aún no funciona nada).
Pero siempre debes considerar Emulación y aspectos legales , especialmente si los emuladores se colocarán en algún lugar de Internet
Aquí algunos enlaces míos relacionados con el control de calidad:
- Cómo obtener CPU y otras especificaciones de hardware para el desarrollo del emulador
- Escribir un Z80 gráfico emulador en C o C ++ Recomiendo encarecidamente leer este (especialmente para sus estudiantes) les ahorrará mucho tiempo y nervios
- ¿Cuál es la implementación adecuada para la emulación de hardware?
Respuesta
¿Está buscando un ¿Sistema que no se ha emulado mucho? Sugiero permanecer dentro de las computadoras de 8 bits (o las primeras y simples de 16/32 bits), ZX Spectrum 48k es un sistema relativamente simple: muy bien documentado, sin sprites, sin chip de audio, sin Bancos RAM, E / S simple, si Gráficos simples (aunque con un diseño extraño), no se requiere emulación de ciclo perfecto, CPU bien conocida, fácil manejo de casetes (podría ser aún más fácil con trampas de ROM). Hay toneladas de juegos, muchos de ellos con licencias permisivas.
La desventaja: hay una enorme cantidad de emuladores disponibles, muchos de ellos en la categoría retro y muchos con código fuente. disponible, por lo que el peligro de hacer trampa y copiar otro código es alto.
Y, por supuesto, trabajar en un emulador de un sistema no emulado anteriormente proporcionaría un beneficio adicional de la sensación de logro.
Comentarios
- Tuve el mismo instinto, pero lo ampliaría sugiriendo que SNA y Z80 y formatos de instantánea suficientemente bien definidos que necesitas ‘ Ni siquiera te preocupes por la emulación de cinta. Y, ‘ s sea honesto, TZX es un poco un miasma en este punto.
- Creo que la ROM de Spectrum ahora es de dominio público, que puede ayudar (o hacer las cosas demasiado fáciles)
- El ZX Spectrum es un gran ejemplo de hardware simple, pero también uno de programación de conteo cíclico bastante complejo (Racing the Beam) para obtener efectos de juego utilizables.
- @Tommy Oh, nunca sugeriría la ZX80 / 81 por la misma razón. Y aunque no es un verdadero aficionado a Spectrum, he visto un buen código dependiente del tiempo para él. La mayoría de las manipulaciones de la pantalla de prominet después de que se haya mostrado esa parte, pero antes de que se ejecute una vez. Es ‘ un problema muy simple que se encuentra en una gran cantidad de sistemas. No es un gran problema, pero depende del tiempo. Por ejemplo, esquemas de emulación simples que solo aceleran la velocidad en un nivel de marco producirán basura en hosts de emulación más rápidos … y así sucesivamente.
- @Stormcloud La ROM de Spectrum no es de dominio público, aunque el permiso ha sido concedido para distribuirlo para su uso con emuladores. Las ROM ZX80 y ZX81 se publicaron bajo la GPL.
Respuesta
¿Puedo sugerir que eche un vistazo a algunos de los primeros juegos de arcade? Específicamente estas dos plataformas 8080 / Z80:
-
Midway 8080 : desarrollada en 1975 y potencia Space Invaders . Utiliza un búfer de cuadro en blanco y negro de 256x224x1 bits en la RAM.
-
VIC Dual – Sega / Gremlin «s diseñada en 1977: el juego más conocido es Carnival . El video es una matriz de 32 x 28 de 8 x 8 caracteres (todos en RAM) y puede admitir un paleta de colores, mapeada a una PROM.
Estos son muy simples de emular una vez que la emulación Z80 funciona. No hay trucos divertidos de línea de exploración ni estados de espera de CPU extraños. los controles están disponibles a través de puertos de E / S con mapas de bits.
Puedes jugar con estas plataformas de forma interactiva en http://8bitworkshop.com/ (Divulgación completa: administro este sitio y soy el autor de los libros vinculados en el sitio que describen estas plataformas)
Apple] [también es una buena opción para una plataforma basada en 6502, aunque el subsistema de video es más complicado que en las dos plataformas de arcade.
Comentarios
- Por qué ‘ vale la pena, creo que Space Invaders es una sugerencia inspirada. Si la memoria le sirve ‘ s solo un 8080 con una pantalla de mapa de bits de 1 bpp, algunos puertos de E / S para los controles, ningún intento de acelerar el ráster, audio que tiene solo el formato » dispara ruido X ahora «, requisitos de precisión muy relajados, y produce un juego que todavía de vez en cuando intenta vender ahora. Es ‘ solo el problema de la legalidad que podría hacer que se detenga, aunque ‘ siempre soy confuso con las excepciones académicas.
- Eso ‘ es bastante correcto, hay ‘ también un chip externo que ayuda con el 8080 ‘ s falta de una palanca de cambios de barril. No debería ‘ no haber ningún problema de legalidad al emular el hardware (no hay ‘ s ningún BIOS protegido por derechos de autor u otro código) y ‘ es bastante fácil de escribir tu propio juego, por ejemplo: 8bitworkshop.com/v3.2.0/?platform=mw8080bw& file = game2.c
Respuesta
PET o TRS80 podrían funcionar bien. Hardware simple con texto en pantalla para que puedan ser emulados con salida de texto directo agregando inicialmente código para sus conjuntos de caracteres impares más adelante y es poco probable que contenga mucho en la forma de código de recuento cíclico exacto.
Idea adicional después si optar por un PET añadiendo soporte C64 daría gráficos.
El 6502 es probablemente más simple de emular.
El pensamiento final podría ser el Ohio Scientific Superboard II o en su encarnación del Reino Unido el UK101 ya que no creo que tenga hardware de video reprogramable.
Comentarios
- Sí, los tres (PET, TRS, Superboard (olvidé totalmente sobre el último)) son excelentes máquinas simples y excelentes para emulaciones. Pero también falta una buena selección de juegos listos para usar. Sin mencionar el color y lo que la gente puede esperar hoy.
Respuesta
El PDP-8 digital es un arquitectura simple para la que puede ser fácil escribir un emulador. Algunas razones para esto incluyen:
- Solo 8 instrucciones básicas
- No hay interfaz de video, etc. para emular, solo E / S de terminal
- No es necesario precisión del ciclo, la serie real de máquinas en sí no garantiza el mismo comportamiento en las diferentes implementaciones
- Puede comenzar con una configuración simple (por ejemplo, una máquina de 4Kword ejecutando FOCAL-69) y gradualmente hacer que el emulador sea más complejo (por ejemplo, una máquina de 32Kword con aritmética extendida, que ejecuta OS / 8 desde un disco RK05)
- Muchos manuales disponibles en línea
- Los diagnósticos MAINDEC y sus instrucciones están disponibles en línea, que pueden para probar que la emulación funciona correctamente
Esto puede no cubrir todos sus requisitos, por ejemplo, E / S mapeadas en memoria, pero ciertamente incluye cosas como decodificación de instrucciones y modos de direccionamiento. de la documentación va directamente al nivel de hardware básico que podría ser apropiado para un curso de EE.
Comentarios
- Un punto interesante es que la mayoría de los sistemas mencionados anteriormente tienen CPU Z80 o 6502, las cuales carecen un poco en términos de sus modos de direccionamiento compatibles. Si la cobertura de los modos de direccionamiento es importante, el PDP-8 tiene una selección mucho mejor de ellos para demostrar.
- Para el » juego » aspecto de la pregunta, creo que Adventure todavía se mantiene / resucita para las arquitecturas PDP (pero verifique eso, podría estar equivocado).
- @TobySpeight You ‘ correcto, se mantiene o resucita, pero para el PDP-10 , que es totalmente incompatible con el PDP-8.
Respuesta
La opción ZX Spectrum ya se ha dicho: su fuerza es el hardware IO completamente simplista y el hecho de que muchos juegos existentes NO requieren ciclos precisos -Emulación correcta de todas las peculiaridades con la única excepción del sonido (nada cercano al sonido correcto sin emulación de ciclo exacto de la CPU y reducción de resolución correcta del flujo de sonido intermedio de 1 bit producido por la CPU).
Cualquier otra opción de hardware para juegos como NES, G enesis y todas las máquinas similares basadas en sprites no es una opción, obviamente, ya que se necesita mucho tiempo para aprender el hardware complejo, desarrollar formas de emularlo, solucionar las deficiencias en la emulación, etc. Por ejemplo, incluso un Super Mario «simple» el juego en NES no funcionará a menos que el bit de colisión de sprites en PPU se emule correctamente.
Las opciones restantes en mi humilde opinión son las siguientes:
- PC IBM basado en modo texto temprano
- cualquiera de las máquinas CP / M existentes
- (sin incluir máquinas «grandes» antes de la era «micro»)
El punto clave aquí está la visualización en modo texto, que no es tan difícil de emular y mucho más simple de mostrar en la máquina host (incluso sin necesidad de mostrar gráficos con píxeles, trabajar con sistema de ventanas / SDL / etc.).
Sin embargo, todavía se necesita cierta investigación para recopilar los programas adecuados con los que trabajar, incluidos los juegos. Hay algunos juegos en modo texto en CP / M, e igualmente deberían ser algunos para IBM PC.
Comentarios
- Con la ventaja potencial de un ¿Siendo la máquina CP / M que hay ‘ destinado a ser al menos uno para el que bastará una simple emulación 8080?
- Bien, pero de nuevo, hay No hay muchos juegos para IBM en modo texto, ¿verdad?
- @Raffzahn – solo es necesario que haya uno .
- @Jules Jejeje … sí, claro. Pero luego ‘ diga que un mínimo de 8080 funcionará
Responder
Un sistema con la menor cantidad de chips personalizados probablemente sería un objetivo más limpio de emular.
Un Apple II es uno de los sistemas más simples (sin LSI excepto por la CPU 6502) para el cual Se escribieron grandes cantidades de juegos (fácilmente disponibles).
También se han publicado toneladas de libros y artículos (antiguos) sobre la arquitectura del sistema de Apple II y la CPU 6502. Por lo tanto, el sistema ha sido bastante bien documentado por múltiples fuentes (citables).
Los emuladores para un Apple II pueden ser del orden de 10K líneas de código C, posiblemente un poco menos, lo que podría caber dentro de su marco de tiempo del curso.
Comentarios
- La CPU puede ser simple, pero emular periféricos (pantalla, etc.) probablemente aún sería una tarea considerable
Respuesta
Suponiendo que sea una contribución, estas son mis notas directas sobre las máquinas para las que he escrito emuladores, en orden cronológico de lanzamiento aproximado, con suerte para ofrecer algo de color en formatos de archivo, etc:
Atari 2600
La característica distintiva del Atari 2600 es la sinergia entre el procesador y la salida de gráficos; juegos implementan una función en tiempo real que proporciona componentes gráficos a la salida de video a medida que se ejecuta el ráster. Por lo tanto, creo que esta es una mala elección para el propósito establecido: el verdadero trabajo duro de escribir un emulador 2600 es la sincronización y la interacción fuera del microprocesador.
Apple II
Hardware relativamente simple, pero muy matizado, con múltiples modos de gráficos, y necesita inclinarse hacia la enseñanza de video NTSC para poder decodificar su salida de color. Emular el Disco II también es prácticamente imprescindible, pero es una misión en sí misma, ya que los formatos de archivo más comunes esperan que proporciones un codificador Apple GCR.
ZX80 / 81
También probablemente demasiado complicado para el propósito establecido, el concepto central es reutilizar el ciclo de actualización de la CPU y un subconjunto de búsquedas de instrucciones para escanear video. Si opta por no volver a implementar ese mecanismo como el original, terminará con solo el modo de texto predeterminado de la ROM.
Commodore Vic-20
Esta es una máquina de mapa de bits simple con un procesador simple en el 6502 y una cantidad decente de juegos, algunos de los cuales se suministraron en cartucho, lo que le exime de la necesidad de emular una cinta o una unidad de disco. La única mosca en el ungüento son sus 6522; estos son temporizadores combinados / chips de cambio / entrada / salida con un montón de peculiaridades. Pero una gran ventaja del Vic-20 es que arrancará hasta el indicador BASIC sin funcionar los 6522, y el BASIC en sí funcionará solo con los temporizadores del 6522 implementados , incluso de forma inexacta.
Su poco tiempo como líder del mercado antes de la llegada del C64 también limita el número de títulos que hacen un uso avanzado del hardware: hay ejemplos contemporáneos de carreras de ráster como los títulos Imagic , pero son una minoría.
Los formatos de archivo en los que se conservan los datos son un desastre , pero limitarse a la compatibilidad con cartuchos y tener cuidado de usar solo los títulos que se suministraron en el cartucho debería evitar ese problema.
ZX Spectrum
Cubierto en otros lugares; Creo que es una buena elección. Especialmente si se ciñe a los formatos de archivo de instantáneas.
Oric 1 / Atmos
Cubierto en otra parte; una opción decente, pero hay otro de esos molestos 6522 allí. La mayoría de los juegos están disponibles en cinta, necesitarás admitir todo eso.
Acorn Electron
Bitmapped, un 6502 más una lógica externa relativamente simple, pero seis modos de gráficos diferentes y tiempos serían una molestia: el costo de cada ciclo es una función del área al que se accede (ROM versus RAM), el modo de gráficos (40 columnas versus 80 columnas modos) y posiblemente el estado de salida de gráficos actual (los modos de 80 columnas bloquean los accesos a la RAM durante la región de píxeles; los modos de 40 columnas no). Pero puedes modelarlo como una máquina de 1Mhz para la mayoría de los juegos y, en su mayoría, salirte con la tuya una versión centrada en líneas de salida de gráficos.
Hay una pequeña cantidad de juegos disponibles en ROM, pero afortunadamente el hardware de cinta permitirá en su mayoría una emulación de muy baja calidad: es un tipo de juego que genera un interrumpir al recibir un byte, con solo dos títulos en los que puedo pensar en hacer una introspección más profunda que eso.
Amstrad CPC
Probablemente uno para evitar para el propósito indicado: tiene un 6845 CRTC, lo que genera una salida de gráficos muy configurable y, por lo tanto, muchos títulos que compiten con la trama. El uso del disco también fue bastante generalizado, pero su controlador de disco 8272 es un nivel adicional de dolores de cabeza en comparación con el WD1770 que verá a menudo en otros lugares.
MSX y / o ColecoVision / SG1000
Diferentes chips de sonido, misma CPU y video.De hecho, creo que se puede llegar bastante lejos ignorando la interacción de tiempo porque el chip de video mantiene su propia RAM al alcance de la mano. Pero tiene mosaicos y sprites, y cuatro modos gráficos diferentes, probablemente para una empresa demasiado sustancial para un curso de microprocesamiento.
Master System
Técnicamente un SG1000 mejorado, siendo todo lo que hace la máquina más un modo de gráficos extra, pero el modo de gráficos extra es mucho mejor que los otros que solo un título usa algo demás. Así que en realidad simplifica un poco las cosas si estás contento en el ámbito de ignorar en su mayoría el tiempo.
Pero todavía estás hablando de factorizar las prioridades de los sprites, comprobar las colisiones por píxel, etc. Probablemente demasiado .
Nota a pie de página: hacer trampa con acceso a la cinta
Para un grupo de las computadoras domésticas mencionadas anteriormente, puede omitir la emulación de cinta para cualquier cosa que esté codificada en el formato ROM predeterminado con solo insertar una trampa adecuada en la ROM del sistema y la cola desde el archivo de origen. Muchos títulos, pero no todos, se basan por completo en la ROM incorporada para la E / S de cinta, de modo que se pueden cargar muchos títulos sin ningún intento real de hardware.
En todos los casos, es un truco bastante complicado, pero servirá si ese lado de la emulación no es importante para usted; prefiere simplemente eliminarlo de la ecuación e ignorar lo que no funciona.
Específicamente:
Vic-20:
- si el contador del programa llega a 0xf7b2, copie el siguiente Tape el encabezado en la ubicación indicada por b3: b2, ponga a cero 0x90 y 0x93, y continúe desde 0xf7b5 (ya que evita un JSR);
- trap 0xf90b, verifique X = 0xe, si es así, entonces obtenga el siguiente cuerpo de datos de la cinta y escriba en la memoria emulada desde c2: c1 pero no más allá de af: ae independientemente del tamaño del cuerpo, luego establezca el bit 6 en 0x90, borre los indicadores de acarreo e interrupción y continúe desde 0xfccf.
Oric:
Para ROM 1.0, intercepta la PC en la dirección 0xe630. Para 1.1, observe la dirección 0xe6c9.
Al detectar eso, cargue A con el siguiente byte de la cinta y establezca la bandera cero de acuerdo con su valor.
Luego, RTS.
También hay una bandera en 0x67 en la ROM original, o 0x24d que distingue entre las codificaciones de cinta rápidas y lentas de la máquina, pero el formato de archivo de cinta habitual solo tiene los bytes decodificados para una rápida y emulación sucia no se preocupe.
Electron:
Instalar NOP en 0xf4e5, 0xf6de, 0xf6fa y 0xfa51 para deshabilitar las ramas de la cinta. El sistema operativo ahora intentará cargar los datos de la cinta como si estuvieran en una ROM serial.
Coloque la PC en 0xf0a8 y verifique que la X el registro es igual a 14 y el valor en la dirección 0x247 es cero. Entonces sabrá que la ROM está tratando de obtener el siguiente byte de la cinta.
Coloque el siguiente byte en Y, establezca A en 0 y RTS.
El formato de archivo de cinta principal le permite en su mayoría poner en cola bytes directamente desde el archivo (después de algunos fragmentos triviales de navegación gation, y a través de ZLib u otro descompresor GZ, aunque puede simplemente hacer gunzip con anticipación).
ZX Spectrum:
(Este está transcrito de notas muy antiguas; podría valer la pena confirmarlo contra un desmontaje de la ROM)
Capture la PC que llega a 0x056c en la ROM de 48kb. Tome el siguiente bloque de la cinta (si usa un archivo TAP, se lo proporcionará directamente; yo diría que no debería molestarse en intentar admitir TZX en este tipo de proyecto).
Si su longitud es menor que el valor en DE, reinicie el acarreo y el retorno.
Compare el primer byte del bloque con el valor de B. Si no coinciden, reinicie el acarreo y el retorno.
De lo contrario, ponga en cola los primeros bytes DE que llegó a la dirección apuntada por IX y establezca el bit bajo de C y establezca el acarreo.
Luego, realice directamente un RET o simplemente omita la PC adelante a 0x05e2, que es el RET que normalmente termina la carga de la cinta.
Las máquinas de 128kb pasan a la ROM de 48kb para la carga de la cinta, por lo que se aplica el mismo truco sujeto a verificar lo que se pagina.
Comentarios
- Buen escrito. Estoy de acuerdo con todo lo dicho, tal vez con dos pequeños complementos para Apple II. Si bien es cierto que el hardware de video necesita bastante reflexión, su delicadeza se puede ignorar por completo en la emulación, ya que La equivalencia de ciertos patrones de bits debe traducirse a color, si es que lo hace, ya que A2 se ejecuta con bastante frecuencia con pantalla monocromática, con la que podría emularse como mapa de bits sin más detalles. En segundo lugar, siempre que las Gemes que se van a jugar estén basadas en ProDOS, no se necesita una emulación detallada del Disco II, ya que funciona con hardware muy diferente.
- @Raffzahn ¿cuál sería la forma más simple de una tabla de búsqueda para la salida de color sea?Razonando desde NTSC, y tratando todo como descomponible a doble alta resolución, puedo imaginar una tabla indexada por un contador de tres bits que representa la fase más un registro de desplazamiento de cinco bits de salida de video para obtener medio ciclo de color con un punto central. Entonces una tabla de 256 entradas. Pero ese ‘ es un razonamiento muy ingenuo; ¿A la gente le ha ido mejor?
- @Tommy: Un enfoque simple es simplemente usar una secuencia repetida de cuatro colores (creo que (rojo, amarillo oscuro, verde, azul) para píxeles de doble alta resolución y desenfoque la pantalla un poco. Eso terminará dejando franjas de color en las cosas, pero los monitores reales tienden a hacer eso de todos modos. Dado que el video de Apple] [está fuera de especificación, no hay ‘ una » correcta » forma de mostrarlo, y los monitores reales tenderán a mostrar las cosas de manera ligeramente diferente.
Respuesta
Creo que usar juegos gráficos como objetivo posiblemente exija demasiado a los estudiantes. Ejecutar un juego generalmente requiere una buena emulación no solo de la mayoría de las funciones del procesador, pero también mucho hardware, no menos los circuitos de video (que a menudo son bastante complejos y en muchos casos presentan muchos problemas de sincronización complicados). Si algo no funciona del todo bien, los resultados son Probablemente sea muy malo nombramiento. Sugeriría comenzar con un objetivo más fácil.
Apuntaría a un sistema que tenga una interfaz en modo texto, en lugar de gráfica, porque tales interfaces suelen ser mucho más simples y pueden no tener requisitos de tiempo específicos. que necesitan ser satisfechos (es decir, a menudo funcionan completamente en paralelo al acceso del procesador a la memoria sin afectar el procesador en absoluto). También recomendaría un sistema que tenga un programa de monitoreo de nivel de máquina integrado, porque esto ayudará a depurar programas ejecutándose en la máquina sin necesidad de implementar un depurador a nivel de emulación.
Una sugerencia basada en mi proyecto de investigación personal actual es la computadora Nascom 2. Esta es una máquina relativamente simple basada en Z80 con hardware en modo texto que no interactúa con la CPU (si hay una disputa, se resuelve a favor de la CPU, lo que significa que, en teoría, es posible que no se muestren un puñado de píxeles en cada cuadro si se accede a la pantalla al mismo tiempo que se actualiza ocurriendo, pero th No es probable que sea particularmente notable o incluso frecuente, por lo que ofrece un resultado utilizable con hardware muy simple). Por lo tanto, no es probable que la sincronización precisa sea especialmente difícil o importante para esta máquina. El hardware de la máquina es simple y está bien documentado. Los periféricos integrados son un UART (que se puede usar para una terminal / impresora remota o para cargar y guardar casetes … lo que significa que no es necesario emular realmente el manejo de casetes a nivel de audio, lo que ahorra una gran cantidad de tiempo de implementación) y un módulo IO paralelo. Las herramientas disponibles también fomentan la experimentación en lenguaje ensamblador, que imagino que es un objetivo deseable para su curso.
Una cosa interesante acerca de esta máquina es que hay una brecha en las opciones de emulación disponibles: el la página web más conocida sobre la máquina ha solicitado un emulador basado en javascript que pueden incrustar en la página, pero hasta ahora nadie ha proporcionado uno.
Respuesta
He hecho dos y un poco desde cero emulaciones para Mac usando Swift. Estas son mis observaciones personales basadas en mi experiencia.
Ninguna de mis emulaciones tiene una precisión de ciclo completa, lo que genera algunos problemas.
Commodore PET
Esta fue la primera emulación que escribí. Necesita, como mínimo, una emulación 6502, una emulación PIA, una emulación VIA y una emulación de video.
El 6502 es realmente simple y un excelente procesador para empezar. También está bastante bien documentado. El sitio Visual6502 fue invaluable para determinar el comportamiento exacto de las instrucciones donde la documentación era ambigua. Como comentario al margen, escribí una emulación de un procesador un poco posterior (no recuerdo cuál) que llenó algunos de los espacios en el conjunto de instrucciones. Esto hizo que escribir el código de prueba 6502 sea mucho más fácil (incluso solo PHX
y PHY
simplifican algunas cosas. por otro lado, cualquier software que usara las «instrucciones no documentadas» del 6502 original fallará en mi emulación.
El PIA y VIA son chips IO relativamente simples de emular. El controlador de video puede ser tan simple como leyendo la RAM de la pantalla, traduciendo a ASCII o una aproximación cercana y dibujando el texto resultante en una ventana. Finalmente, creé un conjunto de mapas de bits que eran copias precisas del conjunto de caracteres PET.
Mi principal recurso para el PET fue «Programando el PET / CBM» por Raeto West. Tengo una copia original, pero hay PDF ver siones en línea. Además, es importante la disponibilidad de ROMS BÁSICAS y KERNAL.No querrás reescribir el sistema operativo.
Emular la unidad de cinta fue una PITA. Mi versión de software era menos confiable que la real, y los propietarios de PET sabrán que realmente dice algo. La principal El problema, pensé, es que se basa en pulsos de tiempo precisos del ciclo y, aunque mi emulador cuenta los pulsos del reloj, no necesariamente invoca la interrupción del temporizador en el momento exacto.
Tuve más éxito escribiendo una emulación de las unidades de disco duales. Esto también requería una robusta emulación IEEE 488, pero la emulación de la unidad de disco era bastante fácil. No es una emulación de hardware, solo toma los comandos enviados por PET y los ejecuta usando archivos planos en el disco duro de Mac.
Al final, escribí un código que detendría el emulador, inyecte directamente un archivo de programa en la memoria y luego inicie el emulador nuevamente. Esto resultó ser mucho más conveniente que emular discos o cintas que dejé de trabajar en ellos.
Mi emulador funciona bastante bien con la mayoría del código PET. Desafortunadamente, hay un problema con PET Space Invaders, probablemente causado por el código del teclado, por lo que no reconoce las teclas presionadas correctamente. Además, no intenté abordar la generación de sonido.
Sinclair ZX Spectrum
De alguna manera, esto es incluso más fácil que el PET. Debe escribir un emulador Z80 que sea más complejo que el 6502, pero hay un conjunto de pruebas de CPM que puede usar para verificar gran parte de su funcionalidad, solo necesita emular la subrutina de salida de caracteres de CPM para que funcione.
Los únicos otros chips que necesita emular son el ULA y no necesita hacer mucho de eso si está preparado para renunciar a una unidad de cinta. Además, el generador de video, que es un poco extraño en la forma en que se dirige a la RAM de la pantalla.
Lo realmente bueno del Spectrum es que la pantalla siempre está en modo de mapa de bits y el sistema operativo crea caracteres directamente escribir los patrones de píxeles de escritura. No tienes que preocuparte por un juego de caracteres porque está mágicamente ahí cuando arrancas el emulador con las ROM de Spectrum cargadas.
Llevé el Spectrum al punto en que pude cargar y ejecutar Manic Miner y se podía reproducir, aunque sin sonido. Nos llevó unos tres meses trabajar quizás ocho horas a la semana de principio a fin.
Commodore 64
Este es un trabajo en progreso. Obviamente, ya tenía un 6502, que modifiqué para darme el puerto IO del 6510. Hasta ahora, el banco cambiando correctamente, algunas de las funciones de CIA están implementadas y se emula suficiente funcionalidad de VIC II para darme un equivalente de PET, es decir, el modo de texto normal está funcionando. También la memoria de color de borde y de caracteres está funcionando.
Todavía tengo los modos de gráficos más complicados para emular y sprites y debería poder hacer algo con el sonido porque es un chip separado, no dependo de la sincronización precisa de la CPU.
TL; DR
La emulación más sencilla, aparte de la CPU, fue el espectro. Probablemente empezaría con eso, aunque una vieja computadora basada en CP / M 8080 podría ser aún más fácil si puedes conseguir CP / M.
Observaciones adicionales
Probablemente necesite un buen ensamblador cruzado para su plataforma de destino. Obtiene código de ensamblaje manual muy tedioso para pruebas unitarias.
Además, un desensamblador será útil. No tuve que desmontar las ROM BÁSICAS de Commodore porque los desmontajes están disponibles gratuitamente en Internet. Pero cuando intentaba que Space Invaders funcionara, no funcionó al principio y el desmontador fue invaluable para la resolución de problemas.
Por esta razón, cc65 suite es un caso sólido para comenzar con una máquina basada en 6502. Tiene un buen ensamblador y un excelente desensamblador incluido. La situación del Z80 no era tan buena, pero encontré un ensamblador razonable al final llamado z80asm. Sin embargo, creo que tuve que compilarlo desde la fuente.
Además, necesitará una buena documentación sólida. Una vez más, la documentación del 6502 en línea es virtualmente incomparable. Los documentos son menos comunicativos para el Spectrum, pero es tan simple, puede salirse con la suya con una emulación de ULA bastante mala.
Respuesta
Junto con todas las otras buenas sugerencias, como una alternativa a Z-80 y CP / M, podría considerar un sistema Motorola 6809 genérico para ejecutar FLEX o posiblemente OS-9 , ambos inspirados en Unix. Como sistema basado en CLI, no es necesario que la sincronización sea precisa.
Además, si está construyendo el simulador, es más bien como construir el hardware; portar el sistema operativo fue una tarea real , que hice en la década de 1980, en lugar de una tarea de clonar algo para la educación.»¿Arranca el sistema operativo y ejecuta los programas?» es un objetivo muy realista.
Como ejecuta un sistema operativo portátil que funciona con hardware de muchos fabricantes diferentes, significa que los estudiantes no tienen una sola forma de hacerlo. El estudiante A podría construir una pantalla de mapa de bits; el estudiante B puede hacer un UART y tener una interfaz en serie. Algunos pueden intentar hacer bien cada ciclo; algunos pueden intentar hacer todas las operaciones correctamente. Por lo tanto, en lugar de simplemente intentar copiar algo sin necesariamente comprender el original restricciones de diseño, los estudiantes están comprometidos con una pregunta de ingeniería adecuada: ¿cuál es una buena manera de hacer esto?
CPU
- El 6809 era único en ese momento, ya que era posible escribir código completamente independiente de la posición, que se ejecutaba de manera idéntica dondequiera que estuviera en la memoria.
- El conjunto de instrucciones era casi completamente ortogonal
- Como CPU de 8 bits con bus de direcciones de 16 bits, es bastante simple
- El mecanismo de excepción y efectivo La manipulación de direcciones es muy parecida a los procesadores modernos
- Como diseño de Motorola, tenía IO mapeadas en memoria en lugar de instrucciones de IO especiales
- Más fácil de hacer que Z-80 (muchas menos instrucciones ) o 6502 (menos casos especiales)
- Material a través de https://en.wikipedia.org/wiki/Motorola_6809
FLEX fue diseñado como un sistema inspirado en Unix para CPU de 8 bits
- Fue diseñado específicamente para la portabilidad, y para que arrancara requirió muy pocas llamadas al sistema para ser implementadas; creo que solo lectura / escritura de caracteres, lectura / escritura de bloque de disquete y algún tipo de arranque (sector de lectura y salto
- Independiente del hardware para estas funciones básicas, lo que hace que la simulación sea mucho más fácil
- Es emocionante escribir solo unas pocas funciones y arrancar un sistema operativo completo
- No hay gráficos por los que preocuparse (lo cual es positivo o negativo según su punto de vista)
- Mucho material disponible, f ind a través de https://en.wikipedia.org/wiki/FLEX_(operating_system)
OS-9 similar en intención
- Más similar a Unix que FLEX, un poco más difícil de portar, por lo que recuerdo
- Posteriormente portado a 68000
- Mucho material disponible, búsquelo a través de https://en.wikipedia.org/wiki/OS-9