ESP32 implementation of RustZX Spectrum emulator for ESP32-USB-OTG

Overview

RustZX for ESP32 - experimental version

Goal of the project: Run ZX Spectrum on ESP32

HW: ESP32 OTG USB with ST7789 display

References

Build and flash

Using cargo-espflash:

cargo +esp-1.56.0.1 espflash /dev/tty.usbserial-110 --target xtensa-esp32s2-espidf --release --features "esp32s2_usb_otg native"

With PowerShell:

.\Build-RustZX.ps1 -Target xtensa-esp32s2-espidf -Board kaluga_ili9341 -Port COM23
You might also like...
An implementation of a predicative polymorphic language with bidirectional type inference and algebraic data types

Vinilla Lang Vanilla is a pure functional programming language based on System F, a classic but powerful type system. Merits Simple as it is, Vanilla

An implementation of Ngo et al's GenericJoin in timely dataflow.

dataflow-join A streaming implementation of Ngo et al's GenericJoin in timely dataflow. Ngo et al presented a very cool join algorithm, some details o

A modular implementation of timely dataflow in Rust

Timely Dataflow Timely dataflow is a low-latency cyclic dataflow computational model, introduced in the paper Naiad: a timely dataflow system. This pr

A radix tree implementation for router, and provides CRUD operations.

radixtree A radix tree implementation for router, and provides CRUD operations. Radixtree is part of treemux, on top of which updates and removes are

A flexible, stateless implementation of the bisection method

Flexibility is achieved by giving the user of this crate control over the input and output types

An alternative broken buggy Nix implementation in Rust + Java (for evaluation)

An alternative broken buggy Nix implementation in Rust + Java (for evaluation)

A fast lean and clean modern constraint programming solver implementation (in rust)

MaxiCP-rs This project aims at implementing a fast, and clean constraint programming solver with a focus on correctness, simplicity, maintainability a

Rust implementation of Waku v2 (f.k.a. Whisper)

waku-rs Waku is a p2p messaging protocol tailored for the web3, with origins in Ethereum's Whisper. This Rust implementation is taking reference from

A asynchronous implementation of the invidious innertube aka youtubei API wrapper

A asynchronous implementation of the invidious innertube aka youtubei API wrapper. Using tokio,reqwest, serde and serde_json

Comments
  • Cleanup, as per #1

    Cleanup, as per #1

    This PR is a major cleanup (sorry!). It solves the following issues:

    • cargo fmt
    • app and host folders' copy-paste from the rustzx app removed
    • Requirements on SPI RAM removed
    • More LED boards supported

    What would be the major next steps if this emulator is to work properly?

    • Most important is to optimize the emulator itself. I've configured it to run with 60 frames full-speed without interruption, and the result is that these 60 frames take ~ 8.5 seconds to render so we get ~ 7fps, while we should get 30-50fps to have a chance for a smooth playback (note that the SPI/display speed is not a major contributor - it is the emulator itself; even if you comment out the set_pixel code completely, it still runs with ~ 7fps)

    So... either we optimize the emulator itself, or well, we stop here. :)

    opened by ivmarkov 10
  • Codespaces integration. Swicht to web-flash and wokwi-server tools

    Codespaces integration. Swicht to web-flash and wokwi-server tools

    • Devcontainers now also work on GitHub Codespaces
    • Update rust-analyzer extension
    • Use inputs arguments for tasks.json and launch.json
    • Add web-flash and a script(flash.sh) to use from task in devcontainers
      • Also added default runner per target
    • Add wokwi-server and a script(run-wokwi.sh) to use from task in devcontainers
      • There is also a default runner per target commented in .cargo/config.toml
      • Update build-rustzx.sh, run-wokwi.sh and flash.sh to acetp release or debug argument to select build profile
      • Updated documentation
    opened by SergioGasquez 3
  • Tmp/socket keyboard refactoring

    Tmp/socket keyboard refactoring

    Temporal branch for refactoring of the solution. Discovered several issues:

    • embedded-svc must be fixed to older version, because of https://github.com/esp-rs/esp-idf-hal/issues/79
    • when reference to WiFi goes out of scope, the WiFi is automatically disconnected
    • tcp listener should be created inside new thread instead of passing from main thread to avoid problems with ownership
    opened by georgik 0
  • Improve devcontainers

    Improve devcontainers

    • Fix devcontainers files for VsCode
    • Add task.json with task for building and running simulation
      • When building we use release profile but when running Wokwi simulator we use debug
    • Add actboy168.tasks extension to show task buttons in the status bar
    • Add GDB debugging support for Wokwi simulation
    • Now using --merge argument of cargo-espflash to avoid having a logic for offsets when sharing the resulting binaries
    • Updated README

    Once the esp32-wokwi-gitpod-websocket-server PR (georgik/esp32-wokwi-gitpod-websocket-server/pull/1) gets merged, we need to update:

    • https://github.com/SergioGasquez/rustzx-esp32/blob/main/.gitpod.Dockerfile#L43
    • https://github.com/SergioGasquez/rustzx-esp32/blob/be91640506525e8774a728e301906ca8f0a18377/Containerfile#L51

    In order to transfer those changes to other branches (targets) of the repo:

    • [ ] Update cargo command in build-rustzx.sh and run-wokwi.sh
    • [ ] Update ESP_BOARD and WOKWI_PROJECT_ID in run-wokwi.sh
    • [ ] Update target in config.toml
    • [ ] Update launch.json(both profiles) with the proper paths for gdbpath and executable
    • [ ] Update terminal GDB command on README
    opened by SergioGasquez 0
Owner
Juraj Michálek
Juraj Michálek
Shows how to implement USB device on RP2040 in Rust, in a single file, with no hidden parts.

Rust RP2040 USB Device Example This is a worked example of implementing a USB device on the RP2040 microcontroller, in Rust. It is designed to be easy

Cliff L. Biffle 9 Dec 7, 2022
A no-std esp32 Wifi Lamp

Nostd-wifi-lamp A Wi-Fi controllable lamp written in Rust for the ESP32 using esp-hal. This was created for a blog post you can read here. Usage Sadly

null 9 Apr 30, 2023
Game Boy Emulator written in Rust, as a way to fully grasp the Rust programming language

Flan's Game Boy Emulator Game Boy Emulator written in Rust, as a way to get hands-on with the Rust programming language, and creating a proper project

Flan 3 Dec 31, 2022
Experimental Quantum Computer Simulator + Quantum Chess Implementation

Quantum Chess A somewhat hacky implementation of this paper (made in a week over a holiday). It's not heavily tested and probably has some bugs still

null 19 Jan 21, 2022
Ray Tracing: The Next Week implementation in Rust

rttnw Ray Tracing: The Next Week implementation in Rust How to run Install Rust: Link here. Run project git clone https://github.com/luliic2/rttnw cd

null 20 Apr 26, 2022
Rust implementation of µKanren, a featherweight relational programming language.

µKanren-rs This is a Rust implementation of µKanren, a featherweight relational programming language. See the original Scheme implementation here for

Eric Zhang 99 Dec 8, 2022
An implementation of Olm and Megolm in pure Rust.

A Rust implementation of Olm and Megolm vodozemac is a Rust implementation of libolm, a cryptographic library used for end-to-end encryption in Matrix

matrix.org 66 Dec 26, 2022
Pure Rust Implementation of secp256k1.

SECP256K1 implementation in pure Rust Cargo Documentation SECP256K1 implementation with no_std support. Currently we have implementation for: Convert

Parity Technologies 141 Dec 21, 2022
A Rust implementation of generic prefix tree (trie) map with wildcard capture support

prefix_tree_map A Rust implementation of generic prefix tree (trie) map with wildcard capture support. Design Trie is a good data structure for storin

EAimTY 3 Dec 6, 2022
fast rust implementation of online nonnegative matrix factorization as laid out in the paper "detect and track latent factors with online nonnegative matrix factorization"

ONMF status: early work in progress. still figuring this out. code still somewhat messy. api still in flux. fast rust implementation of online nonnega

null 2 Apr 10, 2020