A Flash Player emulator written in Rust

Overview

Ruffle

Rust Build Status Web Build Status Ruffle Discord
website | demo | nightly builds | wiki

Ruffle

Ruffle is an Adobe Flash Player emulator written in the Rust programming language. Ruffle targets both the desktop and the web using WebAssembly.

Project status

Ruffle is in the proof-of-concept stage and can currently run early Flash animations and games. Basic ActionScript 1.0/2.0 support is in place and improving; ActionScript 3.0 support is forthcoming. For more info, read the project roadmap.

Using Ruffle

The easiest way to try out Ruffle is to visit the web demo page, then click the "Browse..." button to load an SWF file of your choice.

Nightly builds of Ruffle are available for desktop and web platforms including the browser extension.

For more detailed instructions, see our wiki page.

Building from source

Follow the official guide to install Rust for your platform.

Desktop

  • cargo run --package=ruffle_desktop -- test.swf

Web or Extension

Follow the instructions in the web directory for building either the web or browser extension version of Ruffle.

Scanner

If you have a collection of "real world" SWFs to test against, the scanner may be used to benchmark ruffle's parsing capabilities. Provided with a folder and an output filename, it will attempt to read all of the flash files and report on the success of such a task.

  • cargo run --package=ruffle_scanner -- folder/with/swfs/ results.csv

Exporter

If you have a swf and would like to capture an image of it, you may use the exporter tool. This currently requires hardware acceleration, but can be run headless (with no window).

  • cargo run --package=exporter -- path/to/file.swf
  • cargo run --package=exporter -- path/to/file.swf path/to/screenshots --frames 5

Structure

  • core contains the core emulator and common code
  • desktop contains the desktop client (uses wgpu-rs)
  • web contains the web client and browser extension (uses wasm-bindgen)
  • scanner contains a utility to bulk parse swf files
  • exporter contains a utility to generate PNG screenshots of a swf file

Sponsors

You can support the development of Ruffle via GitHub Sponsors. Your sponsorship will help to ensure the accessibility of Flash content for the future. Thank you!

Sincere thanks to the diamond level sponsors of Ruffle:

Newgrounds.com CPMStar Sébastien Bénard Crazy Games Cool Math Games The New York Times Armor Games Onda Educa TwoPlayerGames.org

License

Ruffle is licensed under either of

at your option.

Ruffle depends on third-party libraries under compatible licenses. See LICENSE.md for full information.

Contribution

Ruffle welcomes contribution from everyone. See CONTRIBUTING.md for help getting started.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be dual licensed as above, without any additional terms or conditions.

The entire Ruffle community, including the chat room and GitHub project, is expected to abide by the Code of Conduct that the Rust project itself follows.

Comments
  • Add VP6 video decoding by utilizing an external crate that bundles parts of FFmpeg

    Add VP6 video decoding by utilizing an external crate that bundles parts of FFmpeg

    This is very much a ~~WIP POC RFC OMG~~ PR.

    (With https://github.com/ruffle-rs/ruffle/pull/3117 merged, there aren't any "extra" commits in here anymore.)

    Because this is (I feel like) a fairly heavy change set (both in technical and legal aspects), I'd like to get some feedback about it, before fully polishing it, and hopefully together an acceptable state for merging can be achieved. While rough around the edges, it's already complete enough that it can be seen working on z0r.de: 7055, 7340, 7617, 7872, and many others. (I'm hoping that deploying "unofficial forks" like this in the public is not problematic?)

    Most functionality is in an external crate. The rest of the description applies to the contents of that separate crate. At the moment, that crate lives in this repository: https://github.com/torokati44/vp6-dec-rs In the future, this will be migrated under the Ruffle organization.

    The C code is built by a fairly straightforward build.rs using the cc crate, which automatically handles native compilation or targeting WASM for the extension/selfhosted variant, using a static config. For the WASM target, instead of relying on Emscripten or something similar, a (handmade) tiny fraction of a libc is included as well, just enough to make the decoder compile and work. ~This same libc stub is also utilized on Windows - it was easier this way than supporting compilation with MSVC as well.~ - EDIT: This is no longer true.

    Binding declarations are based on those generated by bindgen, but in the end, only a tiny portion of those were kept - and some other parts didn't work well then targeting WASM. This adds clang as an additional dev dependency, which hopefully isn't too big an issue. Version 7 is for sure too old, 11 is confirmed recent enough - but at least not a whole Emscripten SDK is required. I opted not to use any of the already available ffmpeg binding crates, because they all seemed to have issues with cross-compilation, and doing this without them wasn't that bad after all.

    Some things that should be fairly straightforward to add, but aren't done yet:

    • [X] Reporting which frames are and aren't keyframes, for artifact-free seeking.
      • EDIT: This turned out to be really easy to do.
    • [X] Support for videos with transparency - ffmpeg has VP6A variant as well; or the two streams can be easily merged by hand.
      • EDIT: I have wired this up, it was fortunately only a matter of selecting a different codec, no manual merging needed. The only file I found containing VP6WithAlpha is the (slightly NSFW?) z0r.de/3926, but this one doesn't look like it is actually transparent anywhere at all. And one can build a test file from this example from Adobe as well.
    • [X] ~~Trimming the "padding pixels" off from the right and bottom edges, they are needed only for compression.~~
      • EDIT: When noting this, I mistakenly looked at the FLV tag spec instead of the SWF one. In the SWF tag header, the HorizontalAdjustment and VerticalAdjustment fields are not present. ~Also, I've checked, and even if the size in the header is not an integer multiple of 8 or 16 (the block sizes), the results already match that of Flash Player nicely. Most likely, the actual frame size is also part of the frame data fed to the decoder in FFmpeg, which then handles it properly.~
      • UPDATE: I was wrong with the edit above, and it was only a coincidence that all the videos I looked at were fullscreen, so they were in fact cropped by the player window itself. #4154 exposed this issue, and made the garbage pixels visible. These are now cropped manually, for reasons explained in 2ac4acf3f18d0699e8596f847b8922e8804aa667.
    • [X] Supporting the different post-processing (deblocking/deringing/smoothing) options
      • EDIT: Judging by the header parsing code, I believe that at least the deblocking filter is also configured by the encoded data itself, and FFmpeg applies it as requested.
    • [ ] Triple-checking that nothing in the countless unsafe blocks can crash or leak or do anything nasty.
    opened by torokati44 52
  • Initial extension settings page

    Initial extension settings page

    A lot of the work was done by @kmeisthax . I just rebased & added an official extension settings page. We should probably allow the user to add a blacklist of bad pages and a whitelist of good pages at some point.

    opened by Justin-CB 29
  • avm2: Add actionscript event classes

    avm2: Add actionscript event classes

    This PR would add 29 event classes partially generated by this tool I made. This PR focuses on the classes which are simple in structure and are not much more then some properties with a clone and toString. The comments describing each part are copied from the documentation directly and may be more verbose then needed. I was unsure if all properties need a set and get; so I only created get functions for properties indicated as "read-only".

    Edit - Changed number of classes to reflect PR updates

    opened by golfinq 28
  • web: Enable the bulk-memory WebAssembly extension

    web: Enable the bulk-memory WebAssembly extension

    This should improve all around performance on web, to a varying degree. I'll gladly provide benchmark numbers upon request; but so far I've seen that at least while decoding videos, this should save anywhere between 10% and 20% of processing time, "for free".

    There are still quite a few calls to the naive memcpy and memset functions (explicit loop and load/store in WASM), mostly from core and std. To get rid of these as well, the build-std cargo feature would be needed (which does something similar to what Xargo was for), but that is a nightly-only flag as of now, because there are still some issues with it.

    This raises the minimum browser version requirements to:

    • ~Chrome 75 (released on 2019-06-05): https://v8.dev/blog/v8-release-75#bulk-memory-operations, https://www.chromestatus.com/feature/4590306448113664~ Chrome 87 is already required
    • ~Firefox 79 (released on 2020-06-28): https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/79#webassembly~ Firefox 84 is already required
    • Safari 15.0 (EDIT: released on 2021-09-20 - finally!): https://developer.apple.com/safari/technology-preview/release-notes/#r121

    I know basically nothing about the habits of :apple: ecosystem users, but based on past data, Safari 15.0 is supposed to be the most used version by November, and is supposed to reach near its top market share by about January or February:

    Source: https://gs.statcounter.com/browser-version-market-share

    So, I don't think this should be merged for at least a couple weeks, but we can still talk about it here until then. :)

    opened by torokati44 26
  • A list of flashes working and not on z0r.de

    A list of flashes working and not on z0r.de

    Hi everyone. I stumbled upon this Ruffle project, and remembered that I saved a loooong ago the list of z0r.de links which contain short flashes. I will do the list of working ones and those with issues here in one place because:

    1. I do believe filing the massive amounts of issues for generally short flash movies could clog this place
    2. I think the reviewer of this will know better what kinds of actual technical issue reports to create afterwards Also I don't know how to determine if there are ActionScript 3 things in the flash or not, and I see the ability to see that in Ruffle is in a recently opened issue (https://github.com/ruffle-rs/ruffle/issues/1713). Or maybe there is a possibility to know that already, without decompiling and stuff (I have no technical knowledge of Flash whatsoever)?

    Please tell me if one-flash-per-issue is a thing you really want, instead of this list. And be aware before reviewing this that it may contain a huge amounts of dumb (:

    I will include the other z0rs (either in a separate issue, or I can pile them up right here) after I see the feedback on this issue. Maybe for example I'll stop reporting the "blank video" stuff if I get the message that it's a clear sign of an unsupported-yet-feature, and not a bug of something currently implemented.

    Run in Chrome Build: https://github.com/ruffle-rs/ruffle/releases/tag/nightly-2020-11-28

    Working ones (actually in Ruffle they mostly work better as it doesn't paint the out-of-bounds area in white and AdobeFlash does that for some reason): https://z0r.de/2715 https://z0r.de/2829 https://z0r.de/2789 https://z0r.de/118 https://z0r.de/1216 https://z0r.de/1352 https://z0r.de/1415 (EPILEPSY WARNING) https://z0r.de/1755 https://z0r.de/2186 https://z0r.de/2196 (working fine, but there is a dotted line present far left and far right in Adobe, but not in Ruffle. I guess it's out-of-bounds, but it's shown in Adobe?) https://z0r.de/2234 (much of the out-of-bounds non-white stuff seen in Adobe again, but not in Ruffle) https://z0r.de/2272

    Issues: https://z0r.de/3084
    https://z0r.de/3030 https://z0r.de/2989 https://z0r.de/2954 https://z0r.de/2285 https://z0r.de/2811 https://z0r.de/2809 https://z0r.de/2779 https://z0r.de/2770 https://z0r.de/1176 https://z0r.de/1889 https://z0r.de/2156 https://z0r.de/2183 https://z0r.de/2202 https://z0r.de/2263 https://z0r.de/2307 https://z0r.de/2327 https://z0r.de/2339 The sound is present, but the screen is white blank. I guess many of those have some sort of recorded video in them, which isn't supported in Ruffle yet? Some of the "recorded video" stuff actually works in Ruffle though.

    https://z0r.de/1585 https://z0r.de/2062 https://z0r.de/2214 The sound is present, but the screen is black blank.

    https://z0r.de/3000 The sound is present, but the screen is black blank. Only thing shown is "Inv" text at the top-left.

    https://z0r.de/2097 Sound is present, the screen is white before the properly shown text string "YOU FAILED". I guess unsupported video stuff?

    https://z0r.de/3070 In the Ruffle playback, Russian letters in the floating string are missing. The only thing is left to show from a floating string is "!!!"

    https://z0r.de/2817 The Chinese characters are showing in Ruffle, but in a strange way where the intersections between strokes in the characters are transparent. Not the issue in Adobe playback (all the characters are of solid color). image

    https://z0r.de/2816 There is a strange horizontal alignment issue if you look at the falling snow and the screen borders. Also there is something about green out-of-bounds in the Adobe playback, which Ruffle doesn't have

    With Adobe: image With Ruffle: image

    https://z0r.de/2073 https://z0r.de/2118 https://z0r.de/2240 Those are the ones which got my attention, but maybe it's noticeable in others. This is working fine visually, but the sound is definitely different in Adobe and Ruffle playbacks. It's certainly not played with 1:1 accuracy to the original. Ruffle playback sounds muffled. Either because of some sort of codec/bitrate issues or Ruffle has some filtering applied. If it's the intended way the music should sound in Ruffle, a toggle option could be great which turns sound playback to the original.

    https://z0r.de/2330 This has sound, but the visuals are all gray. The difference between the others which fail to show the "video" part is that the first frame of the "video" (and the black string which is briefly shown on top of the "video" part) is clearly seen before turning into all-gray in Ruffle.

    opened by Diatonator 26
  • swf is not loaded

    swf is not loaded

    Hello,

    First of all many thanks for ruffle.js.

    I have created an example, but it does not work. My example can be found here: http://lena91567.bplaced.net/Hellblau/ why does my example not work? Am I using the wrong ruffle.js?

    Please help me. Thanks a lot!

    question 
    opened by Wahrheit26 25
  • Web servers often serve WASM with incorrect MIME type; better docs/errors needed

    Web servers often serve WASM with incorrect MIME type; better docs/errors needed

    Hello,

    I get an error when using a Web build on my site. Here is what is logged in the console in Firefox (Windows):

    Loading SWF file images/file.swf TypeError: Response has unsupported MIME type Got SWF data TypeError: Response has unsupported MIME type Serious error loading Ruffle: TypeError: Response has unsupported MIME type Serious error occured loading SWF file: TypeError: Response has unsupported MIME type

    Chrome (Windows) is a bit more explicit:

    TypeError: Failed to execute 'compile' on 'WebAssembly': Incorrect response MIME type. Expected 'application/wasm'.

    It turns out the server interpreted the .wasm file as being of type "octet-stream". However, testing the build locally with WampServer has not solved the issue, despite the correct mime type being returned.

    There is no issue on iPad (iPadOS 13 - Safari and Chrome), Ruffle runs as expected.

    Thanks.


    UPDATE:

    Actually Apache needed an extra line in the .htaccess (even in the local server):

    AddType application/wasm wasm

    ... and clearing browser's cache after this.

    web docs 
    opened by Toad06 24
  • web: Decode and mix audio via Rust

    web: Decode and mix audio via Rust

    • Add a new WebAudioMixerBackend that uses the AudioMixer on web, outputting the audio stream via a pair of AudioBufferSourceNodes.
    • Use symphonia for MP3 decoding on web.

    This gives consistent audio between the web and desktop builds. On web, it should significantly improve loading performance and memory usage, as the AudioMixer can decode the audio on demand, as opposed to decoding completely on load using decodeAudioData. This also allows us to simplify some of the preloading code, as the API was contorting itself to deal with SoundStreamBlock data within the limitations of WebAudio.

    Performance may be more intensive during playback as audio is decoded on the fly and not leveraging the browser's native audio capabilities. Underruns may also be an issue, for example, if some AS code does a busy loop, then the audio may drop out.

    We should eventually move towards using AudioWorklet instead, and only use AudioBufferSourceNode as a fallback. We can defer that part to a future PR, as a full AudioWorklet implementation will be quite involved and may require us to deal with shared memory.

    Thx to @torokati44 and @Toad06 for the assistance!

    opened by Herschel 22
  • Add support for capturing images during tests

    Add support for capturing images during tests

    This PR extends regression_test.rs with the ability to capture an image of the final frame of a test (based on the code in exporter). This will allow for automated 'rendering tests' which compare the rendered output of a frame to a reference image on disk.

    The largest change in this PR is the creation of a new tests package. All of the existing SWF test files are moved from core to this package. This allows the test code to depend on ruffle_render_wgpu, which is needed to render an image.

    opened by Aaron1011 19
  • two issues with SetBackgroundColor

    two issues with SetBackgroundColor

    https://github.com/ousia/ruffle-demo/blob/master/006699.swf contains:

    SETBACKGROUNDCOLOR (00/66/99)
    

    It is displayed in https://ousia.github.io/ruffle-demo/.

    But if background color is blue, there should be no black bars.

    opened by ousia 19
  • MovieClip.hittest with shapeflag is not yet implemented

    MovieClip.hittest with shapeflag is not yet implemented

    Opening this so that we can track that hittest isn't fully done yet.

    To implement this we will likely need to ask down to the backend to perform hit testing for us, as inside core we don't have any idea where a shape is actually visible on the screen.

    rendering 
    opened by Dinnerbone 19
  • Portal: The Flash Version: Wrongly colored text

    Portal: The Flash Version: Wrongly colored text

    Describe the bug

    https://www.newgrounds.com/portal/view/404612 On Ruffle, the tutorial text that pops up seems to be colored dark grey instead of being white. Portal

    Expected behavior

    The text should be white like on here. Portal fixed

    Affected platform

    Browser's extension

    Operating system

    Windows 11

    Browser

    Edge 108

    Additional information

    No response

    bug 
    opened by waspennator 0
  • Phineas and Ferb: Spot the Diff: Missing pictures

    Phineas and Ferb: Spot the Diff: Missing pictures

    Describe the bug

    spot-the-diff.zip

    On the title screen, the frame effect around the instructions looks off when looking at the bottom half.

    Diff1

    And the pictures don't seem to show up at all on ruffle on desktop and web.

    Diff2

    Expected behavior

    It should be looking like this.

    Diff1 fixed Diff2 fixed

    Affected platform

    Desktop app

    Operating system

    Windows 11

    Browser

    No response

    Additional information

    No response

    bug 
    opened by waspennator 0
  • Story of the Blanks: Stuck on preloader

    Story of the Blanks: Stuck on preloader

    Describe the bug

    https://www.newgrounds.com/portal/view/573755?emulate=flash

    And the swf itself if it helps make testing any easier. Story-Of-The-Blanks.zip

    Tested on NG and desktop, game seems to get stuck on the preloader almost every time on my laptop, sometimes it'll pop up with the play button, sometimes it won't, or I can use the right click play method to get it to go further, but it still gets stuck in the end.

    Blanks1

    Looking through the logs I see 3 specific errors.

    AVM2 error: Object(ErrorObject(ErrorObject(GcCell(Gc { ptr: 0xb8828c }))))

    ReferenceError: Error # 1069: Property threshold not found on flash.display.BitmapData and there is no default value.

    Error occured when running AVM2 frame script: AvmError(Object(ErrorObject(ErrorObject(GcCell(Gc { ptr: 0xb8828c })))))

    Expected behavior

    It should look like this and be able to boot up to the title screen

    Blanks2

    Affected platform

    Browser's extension

    Operating system

    Windows 11

    Browser

    Edge 108

    Additional information

    No response

    bug 
    opened by waspennator 1
  • Shop Empire: Visual bugs and Soft Lock

    Shop Empire: Visual bugs and Soft Lock

    Describe the bug

    https://www.y8.com/games/shop_empire Right when you start the game, there are noticeable white boxes on screen when running on the web build, but on desktop, these boxes are black instead, and the one box that was invisible initially on the bottom can be read on desktop.

    How it looks on latest web nightly: Shop Empire 1

    How it looks on latest desktop nightly: Shop Empire 2

    Also as soon as you try to start a game and click to start the first chapter, it looks like this, can't really get rid of this.

    Shop Empire 3

    shop_empire.zip Here's a physical swf copy if it makes it easier to test on desktop.

    Expected behavior

    Screen shots of how this should look:

    Shop Empire fixed 1

    Shop Empire fixed 2

    Affected platform

    Browser's extension

    Operating system

    Windows 11

    Browser

    Edge 108

    Additional information

    No response

    bug 
    opened by waspennator 1
  • Scratch 2 doesn't run with

    Scratch 2 doesn't run with "Unknown AVM2 opcode"

    Describe the bug

    Scratch 2 (archived SWF at http://web.archive.org/web/20190714210604/https://cdn.scratch.mit.edu/scratchr2/static/937f088a133dc228065bf12d2cbcd1d9/ScratchFor10.2.swf) doesn't run. Unknown AVM2 opcode: FindDef { index: Index([some number], PhantomData<swf::avm2::types::Multiname>) } is errored in the console repeatedly, and the warning Got AVM2 error RustError("Attempted to assign a non-class grabcut_ocale_facets_2E_o_3A_74858C0B_2D_6A8A_2D_47C9_2D_8FD3_2D_C495417DFA66.DS3 to symbol grabcut_ocale_facets_2E_o_3A_74858C0B_2D_6A8A_2D_47C9_2D_8FD3_2D_C495417DFA66::DS3") when attempting to assign symbol class grabcut_ocale_facets_2E_o_3A_74858C0B_2D_6A8A_2D_47C9_2D_8FD3_2D_C495417DFA66.DS3 is shown, too. Finally, the game stops with Got RustError("Property does not exist: Multiname { ns: Single(Namespace(\"\")), name: Some(\"decodeURIComponent\"), params: [], flags: (empty) }") when constructing AVM2 side of movie clip of type ScratchOnline shown, as decodeURIComponent is not yet implemented.

    Expected behavior

    Scratch 2 can run

    Affected platform

    Browser's extension

    Operating system

    Linux

    Browser

    Chrome 108

    Additional information

    This is one of a couple games that are crashing because the URI functions are not yet implemented (such as #3794).

    bug 
    opened by Lord-McSweeney 0
  • Error on https://www.friv.cm/electricman-2/fullscreen/

    Error on https://www.friv.cm/electricman-2/fullscreen/

    Error Info

    Error name: Error Error message: panicked at 'called Option::unwrap() on a None value', core/src/display_object/container.rs:814:18 Error stack:

    Error: panicked at 'called `Option::unwrap()` on a `None` value', core/src/display_object/container.rs:814:18
        at W.n.wbg.__wbg_new_f9bb493369a83c12 (https://www.friv.cm/ruffle/core.ruffle.c12672100878cba6a22e.js:1:6805)
        at std::sync::once::Once::call_once::{{closure}}::h5b3584428e2c6e9f (wasm://wasm/01817672:wasm-function[1219]:0x2c72f4)
        at std::sync::once::Once::call_inner::hb30cfbde5209eed0 (wasm://wasm/01817672:wasm-function[1496]:0x316a03)
        at core::ops::function::FnOnce::call_once{{vtable.shim}}::h2ad31bbb08635044 (wasm://wasm/01817672:wasm-function[4905]:0x48a8e5)
        at std::panicking::rust_panic_with_hook::hb09154fa23e06c37 (wasm://wasm/01817672:wasm-function[3604]:0x4481b1)
        at core::panicking::panic_fmt::h9e229748e3ae9f9d (wasm://wasm/01817672:wasm-function[5126]:0x48f056)
        at core::panicking::panic::h6f5024a57ca8da86 (wasm://wasm/01817672:wasm-function[4960]:0x48b857)
        at core::ops::function::FnOnce::call_once::hb4b16575678782a6 (wasm://wasm/01817672:wasm-function[1105]:0x29c6ca)
        at ruffle_core::avm1::function::Executable::exec::h7e5ed1117c7e817b (wasm://wasm/01817672:wasm-function[362]:0xdc68b)
        at <ruffle_core::avm1::object::Object as ruffle_core::avm1::object::TObject>::call_method::h9a9a6510cccb34d5 (wasm://wasm/01817672:wasm-function[1068]:0x28ec92)
    

    Player Info

    Allows script access: true Renderer: WebGL

    Page Info

    Page URL: https://www.friv.cm/electricman-2/fullscreen/ SWF URL: https://www.friv.cm/wp-content/games/electricman-2.swf

    Browser Info

    User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Platform: Win32 Has touch support: false

    Ruffle Info

    Version: 0.1.0 Name: nightly 2022-10-28 Channel: nightly Built: 2022-10-28T00:16:16.599Z Commit: 68471723b365a5d4b4f728e1d193a4d87d3bebdb Is extension: false

    Metadata

    width: 640 height: 400 frameRate: 18 numFrames: 36 swfVersion: 6 backgroundColor: #000000 isActionScript3: false uncompressedLength: 3609377

    error-report 
    opened by afifhrz 1
Releases(nightly-2023-01-07)
Owner
Ruffle
Flash Player emulator written in Rust
Ruffle
NES emulator written in Rust to learn Rust

OxideNES A NES emulator in Rust. CPU should be accurate, PPU is mostly accurate, timing between the 2 is off for some corner cases and hardware qui

null 37 Nov 7, 2022
Chip8 emulator written in pure rust, using rust-sdl2 for graphics

Rust-8 chip8 emulator written in rust, using rust-sdl2 for graphics. Features Fully implemented all 35 original chip8 opcodes. This emulator does NOT

Chris Hinson 7 Dec 28, 2022
Commodore 64 emulator written in Rust

Rust64 - a C64 emulator written in Rust This is my attempt to study the Rust programming language and have fun at the same time. The goal is to presen

Krzysztof Kondrak 214 Dec 27, 2022
A Game Boy research project and emulator written in Rust

Mooneye GB Mooneye GB is a Game Boy research project and emulator written in Rust. The main goals of this project are accuracy and documentation. Some

Joonas Javanainen 802 Dec 28, 2022
RustBoyAdvance-NG is a Nintendo™ Game Boy Advance emulator and debugger, written in the rust programming language.

RustBoyAdvance-NG Nintendo GameBoy Advance ™ emulator and debugger, written in rust. WebAssembly Demo: https://michelhe.github.io/rustboyadvance-ng/ P

MishMish 510 Dec 30, 2022
An NES emulator written in Rust

Pinky Pinky is an NES emulator written in Rust completely from scratch based only on publicly available documentation. You can run it in your Web brow

Koute 709 Dec 23, 2022
NES emulator written in Rust

sprocketnes is an emulator for the Nintendo Entertainment System written in the Rust programming language. Its purpose is to serve as a technology dem

Patrick Walton 725 Dec 27, 2022
ZX Spectrum emulator written in Rust

rustzx ZX Spectrum emulator which I writing in rust. I develop this project just for fun and for learning the basics of computer architecture. License

Vladislav Nikonov 162 Dec 27, 2022
CHIP-8 emulator written in Rust

CHIP-8 emulator written in Rust. This is intended to be a project for gaining experience writing emulators and practice Rust.

Pedro Rodrigues 4 May 21, 2021
A 6502 emulator written in Rust.

v6502 This package contains an emulator for the 6502 microprocessor. It doesn't support binary decimal (BCD) mode yet. To run the debug version: cargo

Andrew Young 4 Nov 14, 2021
Spaghetti Chip8 Emulator Written In Rust

How to run? Command is simple: cargo run FILENAME. files are stored in the /c8games folder, use one of them. Example: cargo run INVADERS Keymap use 1

Can 5 Apr 15, 2022
Non cycle-accurate emulator of the 6502 cpu, written in pure rust

CPU 6502 A non cycle-accurate emulator implementing all legal 6502 opcodes. What does non cycle-accurate mean? Every instruction on the 6502 takes a n

Pietro 10 Jul 15, 2022
Experimental Nintendo Switch Emulator written in Rust

Kaminari Experimental Nintendo Switch Emulator written in Rust Usage You'll need to install Rust. rusc >= 1.55.0 rustup >= 1.24.3 Disclaimer Kaminari

SSebigo 4 Dec 7, 2021
A barely functional terminal emulator written in Rust. For nothing but fun.

Nothing much to say now. The basic architecture (kind of) so far is: ┌────────┐ ┌──────────────────┐ │ ptm │◀──────▶│ device::Shell │ └─┬

Huy 4 Apr 29, 2022
A Chip8 Emulator written in Rust

Chipper: Chipper is a Chip8 Emulator written in Rust. It currently supports a few known quirks of the Chip8 varieties. I intend on making it support t

Elijah Hartvigsen 4 Aug 20, 2022
A CHIP-8 emulator written in Rust

damn8 A CHIP-8 emulator written in Rust To run, pass a path to a rom in the command line. TODO: Use function pointers to handle opcodes instead of a l

null 1 Jan 11, 2022
CHIP-8 emulator written in Rust as a side project.

marisa-rs a CHIP-8 emulator, with learning purposes in mind, written in Rust. this is mainly a learning project of mine for deeper knowledge in emulat

Lumine 0 Jul 26, 2022
a work-in-progress NES emulator written in rust.

sayaka-rs a work-in-progress NES emulator, written in Rust. the project image is an edit of a frame from the Mahou Shoujo Madoka Magica manga. the Mik

Lumine 1 Jan 16, 2022
A RISC-V emulator supoorting RV32I instruction set written in Rust

32-bit RISC-V Emulator in Rust This is a RISC-V emulator supoorting RV32I instruction set written in Rust, inspired by Francis Stokes's RISC-V Emulato

null 8 Oct 8, 2022