VM escrita por una mano incierta de las humanidades en el entorno de programación Arduino usando código rápido y bicicletas. Y también hay un compilador para él desde un lenguaje tipo C, escrito en JavaScript utilizando los mismos métodos. Si Ya puedes apresurarte a hacer comentarios, arrojar piedras. Bueno, para aquellos que todavía están interesados, los invito a continuar leyendo.

En general, mi trabajo ya ha estado un poco cubierto por la respetada
tormozedison aquí . Pero en ese momento había más bien un prototipo esférico en el vacío. Y ahora tengo un dispositivo RomanS, que amablemente me proporcionó para experimentos absolutamente gratis. Este dispositivo se llama ESPboy. Se diferencia de otras embarcaciones por su tamaño compacto y ranura de expansión con el chip MCP23017.
Aquí puedes aprender más sobre él.
Si alguien está interesado, ¿cómo se me ocurrió una idea tan extraña como una máquina virtual en un microcontrolador, entonces puede leerla bajo el spoiler.
AntecedentesUna vez en la escuela, fui llevado por un creador de juegos de yoyogames y, como muchos, clavado en él, no entiendo qué. Estas demostraciones mal escritas y mal dibujadas todavía podían presumir ante los amigos, pero en Internet se estaban ahogando entre otras similares. Me di cuenta de lo difícil que era escribir incluso un juego simple, sin mencionar uno serio en el que podías robar a las vacas. Pero el deseo de escribir juegos no se perdió. Cuando obtuve un teléfono móvil, descubrí Midlet Pascal y me divertí con él durante varios años. Después de todo, me di cuenta de que escribir un juego para un dispositivo débil es más fácil que para su hermano mayor más poderoso. Al menos, uno siempre podría hablar no sobre manos torcidas, sino sobre las capacidades limitadas de la plataforma. Sin embargo, los jugadores de botón dieron paso a los sensores y se perdió otra oportunidad de conquistar el mundo. Sin embargo, en algún momento me di cuenta de que podía revivir mis sueños usando un microcontrolador.
Comencé escribiendo un juego debajo de Arduino Uno, ¿a dónde irías sin él? Entonces ella era la única y estaba muy preocupada por su actuación. Traté de flashear lo menos posible. Pero el camino del rastrillo va en pequeños pasos. Cada pequeña edición del código lo hacía parpadear una y otra vez. Y decidí escribir una máquina virtual apilada. Después de todo, hay enormes dos kilobytes de RAM para bytes de código y datos a bordo. Pero lo lento que era, pero por alguna razón, la memoria faltaba constantemente. Probablemente el punto sea que todas mis bicicletas eran con ruedas cuadradas y cabalgaban lentamente. Entonces decidí escribir un emulador de chip 8 en Arduino Mega recién llegado de China. Por supuesto, entonces quería escribir un emulador de gameboy para ella, la primera estación de juegos y alguna supercomputadora más fácil. Como resultado, entendí lo principal. La máquina virtual chip-8 era muy simple, demasiado simple. Tanto es así que al escribir sus juegos para multiplicación o división, tenía que escribir una subrutina lenta separada. Por lo tanto, debe escribir su VM, deshacerse de una falla fatal. En este momento, llegaron varios esp8266 más, con su espacio de 160MHz.
Si le parece que una máquina virtual es un desperdicio de recursos, entonces también reescribí mi emulador de chip-8. Resultó una máquina virtual en una máquina virtual en un microcontrolador. Probablemente pueda ir más allá y escribir una máquina Turing en el chip 8.
ESP Little Game Engine Especificaciones
Una máquina virtual contiene 16 registros de 16 bits cada uno, un registro cero es un puntero de pila. Cada instrucción es de doble byte, algunas instrucciones contienen dos bytes de datos. Memoria direccionable 64KB. En el caso del ESP8266, 20KB están disponibles. El programa se puede descargar desde SPIFFS y UART. Si lo desea, puede agregar una descarga desde una tarjeta de memoria o mediante WiFi. Además de las instrucciones aritméticas habituales y las instrucciones para mover datos, hay instrucciones separadas para trabajar con sprites, pantalla y sonido. Tamaño de pantalla de 128 por 128 píxeles. Con 16 colores por punto, la pantalla ocupa 8 KB de memoria, la misma cantidad de búfer para dibujar sprites y partículas. Aunque la biblioteca TFT_eSPI que uso es capaz de actualizar la pantalla más de 60 veces por segundo, tuve que limitarme a 20 cuadros por segundo. De lo contrario, no hubo suficiente tiempo de procesador para la máquina virtual. Puede dibujar mosaicos y 32 sprites de hasta 128x128 píxeles de tamaño con la posibilidad de rotación y reflejo. Para ahorrar memoria, puede usar imágenes de un solo bit o compresión RLE. Hay una física simplificada: detección de colisiones de sprites con sprites y azulejos, resolución de colisión, gravedad. La pantalla se actualiza línea por línea solo si una fila ha cambiado píxeles. La velocidad de la VM, dependiendo de cuántas líneas se dibujan en el marco, varía de 100 mil a 900 mil operaciones por segundo. Puede usar diferentes pantallas de color, hay un estiramiento suave de la imagen a las proporciones deseadas.
Algunos de los juegos escritos por mí se pueden ver aquí .Al mismo tiempo que VM para ESP8266, escribí un emulador de JavaScript para el navegador. Para no editar el código de bytes manualmente, se agregó un ensamblador simple, basado en mi experiencia con el ensamblador para el MOS6502. Entonces decidí agregar un lenguaje de nivel superior. Sin embargo, mi tarea principal era escribir rápidamente juegos simples, y no un código de ensamblaje de depuración largo. Me pareció que escribir su compilador sería más fácil que agregar LLVM. Y lo escribí en JavaScript, porque sé que no es tan malo como otros idiomas. Por el momento, está lejos de admitir los estándares C, y al compilar, puede encontrar fácilmente un error incomprensible en un lugar incomprensible. Pero es rápido, porque toma menos de 2000 líneas.
Y ahora a la pregunta, ¿por qué escribí todo esto aquí? Ya puedes escribir y ejecutar juegos. Sin embargo, la perfección aún está muy lejos. Si alguien quiere ayudarme a finalizar el ESP LGE, o escribir mi propio juego, entonces estaré muy feliz. Si pensabas que mi idea era interesante y quieres saber más, con gusto responderé tus preguntas. Te advierto que el código para Arduino es bastante difícil de leer. En parte porque soy autodidacta. En parte debido al hecho de que intenté reducir la cantidad de llamadas a funciones para aumentar la velocidad del trabajo. Como resultado, muchas funciones contienen enormes pasos de código. Por lo tanto, no permita que las mujeres embarazadas y los niños vean la pantalla. Poco a poco, intentaré solucionar esto y mejorar la legibilidad.
Y para aquellos que han leído, un ejemplo de un juego. Toma menos de cien líneas y menos de 1 KB en forma compilada.
int stickCount; char key,previouseKey,takenSticks; void redraw(){ int i;
Puedes
probarlo de inmediato. Siga el enlace, luego haga clic en compilar, luego ejecute. Si desea saber más sobre las posibilidades del IDE, puede leer el
tutorial . Gracias por su atencion