From ec7998278ee182eae15805d695538af2d7502728 Mon Sep 17 00:00:00 2001 From: Daniel Bauer Date: Mon, 23 Dec 2019 22:36:40 +0100 Subject: [PATCH] gui to step through cpu instructions --- Cargo.lock | 1210 ++++++++++++++++++++++++++++++ Cargo.toml | 8 +- resources/fonts/LICENSE.txt | 94 +++ resources/fonts/PressStart2P.ttf | Bin 0 -> 82480 bytes src/cpu.rs | 37 +- src/main.rs | 156 +++- 6 files changed, 1479 insertions(+), 26 deletions(-) create mode 100644 resources/fonts/LICENSE.txt create mode 100644 resources/fonts/PressStart2P.ttf diff --git a/Cargo.lock b/Cargo.lock index b37feea..f230eb6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7,9 +7,47 @@ dependencies = [ "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "phf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "piston2d-opengl_graphics 0.70.0 (registry+https://github.com/rust-lang/crates.io-index)", + "piston_window 0.105.0 (registry+https://github.com/rust-lang/crates.io-index)", "simple_logger 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "adler32" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "andrew" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "line_drawing 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rusttype 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", + "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)", + "xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "android_glue" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "approx" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "arrayvec" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "atty" version = "0.2.13" @@ -44,6 +82,21 @@ dependencies = [ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "byteorder" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "c2-chacha" version = "0.2.3" @@ -62,6 +115,15 @@ name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "cgl" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gleam 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "chrono" version = "0.4.10" @@ -72,6 +134,33 @@ dependencies = [ "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cocoa" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", + "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "color_quant" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "colored" version = "1.9.0" @@ -82,6 +171,114 @@ dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "core-foundation" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "core-foundation-sys" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "core-graphics" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crc32fast" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-deque" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-queue" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-utils" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "deflate" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "dlib" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "downcast-rs" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "draw_state" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "either" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "failure" version = "0.1.6" @@ -102,6 +299,24 @@ dependencies = [ "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "fnv" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "getrandom" version = "0.1.13" @@ -112,6 +327,220 @@ dependencies = [ "wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "gfx" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "draw_state 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "gfx_core 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gfx_core" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "draw_state 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gfx_device_gl" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gfx_core 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "gfx_gl 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gfx_gl" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gif" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "color_quant 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gl" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gl_generator 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gl_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "khronos_api 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gl_generator" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "khronos_api 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gl_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "khronos_api 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "gleam" +version = "0.6.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gl_generator 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "glutin" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "android_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "cgl 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "cocoa 0.18.5 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", + "glutin_egl_sys 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", + "glutin_emscripten_sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "glutin_gles2_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "glutin_glx_sys 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "glutin_wgl_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winit 0.19.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gl_generator 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "glutin_emscripten_sys" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "glutin_gles2_sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "glutin_glx_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "x11-dl 2.18.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hermit-abi" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "image" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "gif 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)", + "jpeg-decoder 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "png 0.15.2 (registry+https://github.com/rust-lang/crates.io-index)", + "scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "tiff 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "inflate" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "interpolation" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "jpeg-decoder" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "khronos_api" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "lazy_static" version = "1.4.0" @@ -122,6 +551,31 @@ name = "libc" version = "0.2.66" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "libloading" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "line_drawing" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lock_api" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "log" version = "0.4.8" @@ -130,6 +584,63 @@ dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "lzw" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memmap" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "memoffset" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "nix" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-derive" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "num-integer" version = "0.1.41" @@ -139,6 +650,26 @@ dependencies = [ "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "num-iter" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-rational" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "num-traits" version = "0.2.10" @@ -147,6 +678,68 @@ dependencies = [ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "num_cpus" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "hermit-abi 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ordered-float" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "osmesa-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "shared_library 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lock_api 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "parking_lot_core" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "phf" version = "0.8.0" @@ -187,6 +780,170 @@ dependencies = [ "siphasher 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "piston" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pistoncore-event_loop 0.49.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pistoncore-input 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pistoncore-window 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "piston-float" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "piston-gfx_texture" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gfx 0.18.2 (registry+https://github.com/rust-lang/crates.io-index)", + "gfx_core 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", + "image 0.22.3 (registry+https://github.com/rust-lang/crates.io-index)", + "piston-texture 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "piston-graphics_api_version" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "piston-shaders_graphics2d" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "piston-texture" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "piston-viewport" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "piston-float 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "piston2d-gfx_graphics" +version = "0.66.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "draw_state 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "gfx 0.18.2 (registry+https://github.com/rust-lang/crates.io-index)", + "piston-gfx_texture 0.40.0 (registry+https://github.com/rust-lang/crates.io-index)", + "piston-shaders_graphics2d 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "piston2d-graphics 0.35.0 (registry+https://github.com/rust-lang/crates.io-index)", + "shader_version 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "piston2d-graphics" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "interpolation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "piston-texture 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "piston-viewport 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "read_color 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rusttype 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)", + "vecmath 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "piston2d-opengl_graphics" +version = "0.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "gl 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "image 0.22.3 (registry+https://github.com/rust-lang/crates.io-index)", + "khronos_api 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "piston-shaders_graphics2d 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "piston-texture 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "piston-viewport 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "piston2d-graphics 0.35.0 (registry+https://github.com/rust-lang/crates.io-index)", + "shader_version 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "piston_window" +version = "0.105.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gfx 0.18.2 (registry+https://github.com/rust-lang/crates.io-index)", + "gfx_device_gl 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)", + "piston 0.49.0 (registry+https://github.com/rust-lang/crates.io-index)", + "piston-texture 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "piston2d-gfx_graphics 0.66.0 (registry+https://github.com/rust-lang/crates.io-index)", + "piston2d-graphics 0.35.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pistoncore-glutin_window 0.63.0 (registry+https://github.com/rust-lang/crates.io-index)", + "shader_version 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pistoncore-event_loop" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "pistoncore-input 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pistoncore-window 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pistoncore-glutin_window" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gl 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "glutin 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)", + "pistoncore-input 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pistoncore-window 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)", + "shader_version 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pistoncore-input" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "piston-viewport 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pistoncore-window" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "piston-graphics_api_version 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pistoncore-input 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "pkg-config" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "png" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "deflate 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)", + "inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "ppv-lite86" version = "0.2.6" @@ -202,6 +959,14 @@ dependencies = [ "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "proc-macro2" version = "1.0.6" @@ -210,6 +975,14 @@ dependencies = [ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "quote" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "quote" version = "1.0.2" @@ -264,6 +1037,41 @@ dependencies = [ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "raw-window-handle" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rayon" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rayon-core" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "read_color" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "redox_syscall" version = "0.1.56" @@ -274,6 +1082,96 @@ name = "rustc-demangle" version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rusttype" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rusttype 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rusttype" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "ordered-float 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "stb_truetype 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "same-file" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "scoped_threadpool" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "scopeguard" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "serde_derive" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "shader_version" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "piston-graphics_api_version 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "shared_library" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "simple_logger" version = "1.3.0" @@ -289,6 +1187,48 @@ name = "siphasher" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "smallvec" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "smithay-client-toolkit" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "andrew 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", + "wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", + "wayland-commons 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", + "wayland-protocols 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "stb_truetype" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "syn" +version = "0.15.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "syn" version = "1.0.11" @@ -310,6 +1250,17 @@ dependencies = [ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "tiff" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num-derive 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "time" version = "0.1.42" @@ -320,16 +1271,98 @@ dependencies = [ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "vecmath" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "piston-float 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "walkdir" +version = "2.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "wasi" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "wayland-client" +version = "0.21.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", + "wayland-commons 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", + "wayland-scanner 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", + "wayland-sys 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "wayland-commons" +version = "0.21.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", + "wayland-sys 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "wayland-protocols" +version = "0.21.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", + "wayland-commons 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", + "wayland-scanner 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", + "wayland-sys 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "wayland-scanner" +version = "0.21.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", + "xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "wayland-sys" +version = "0.21.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "winapi" version = "0.3.8" @@ -344,51 +1377,228 @@ name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "winapi-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "winit" +version = "0.19.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "android_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "cocoa 0.18.5 (registry+https://github.com/rust-lang/crates.io-index)", + "core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "raw-window-handle 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "smithay-client-toolkit 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "x11-dl 2.18.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "x11-dl" +version = "2.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "xdg" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "xml-rs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [metadata] +"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" +"checksum andrew 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9b7f09f89872c2b6b29e319377b1fbe91c6f5947df19a25596e121cf19a7b35e" +"checksum android_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" +"checksum approx 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" +"checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" "checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90" "checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" "checksum backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea" "checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" +"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +"checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" +"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" "checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb" "checksum cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "f52a465a666ca3d838ebbf08b241383421412fe7ebb463527bba275526d89f76" "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +"checksum cgl 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "55e7ec0b74fe5897894cbc207092c577e87c52f8a59e8ca8d97ef37551f60a49" "checksum chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01" +"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +"checksum cocoa 0.18.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1706996401131526e36b3b49f0c4d912639ce110996f3ca144d78946727bce54" +"checksum color_quant 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0dbbb57365263e881e805dc77d94697c9118fd94d8da011240555aa7b23445bd" "checksum colored 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "433e7ac7d511768127ed85b0c4947f47a254131e37864b2dc13f52aa32cd37e5" +"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" +"checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" +"checksum core-graphics 0.17.3 (registry+https://github.com/rust-lang/crates.io-index)" = "56790968ab1c8a1202a102e6de05fc6e1ec87da99e4e93e9a7d13efbfc1e95a9" +"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" +"checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca" +"checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac" +"checksum crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfd6515864a82d2f877b42813d4553292c6659498c9a2aa31bab5a15243c2700" +"checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" +"checksum deflate 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)" = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4" +"checksum dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "77e51249a9d823a4cb79e3eca6dcd756153e8ed0157b6c04775d04bf1b13b76a" +"checksum downcast-rs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "52ba6eb47c2131e784a38b726eb54c1e1484904f013e576a25354d0124161af6" +"checksum draw_state 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "33cf9537e2d06891448799b96d5a8c8083e0e90522a7fdabe6ebf4f41d79d651" +"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" "checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9" "checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08" +"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" +"checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +"checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" "checksum getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e7db7ca94ed4cd01190ceee0d8a8052f08a247aa1b469a7f68c6a3b71afcf407" +"checksum gfx 0.18.2 (registry+https://github.com/rust-lang/crates.io-index)" = "01de46f9508a5c259aef105f0bff760ceddca832ea9c87ce03d1923e22ee155b" +"checksum gfx_core 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "75fbddaef2e12b4995900539d7209d947b988a3d87ee8737484d049b526e5441" +"checksum gfx_device_gl 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)" = "109c385fa380c18888633aa27d1e16cbae518469702a2f69dcb5f52d5378bebc" +"checksum gfx_gl 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8525888d909a6424b04f9136976f07a85fc1f3704555c1a73897e258326c8319" +"checksum gif 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)" = "471d90201b3b223f3451cd4ad53e34295f16a1df17b1edf3736d47761c3981af" +"checksum gl 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d7d8c8e25e8ed44d4813809205090162723a866fb4be3a9d8bb983c9a0bf98f1" +"checksum gl_generator 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a0ffaf173cf76c73a73e080366bf556b4776ece104b06961766ff11449f38604" +"checksum gl_generator 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "39a23d5e872a275135d66895d954269cf5e8661d234eb1c2480f4ce0d586acbd" +"checksum gl_generator 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ca98bbde17256e02d17336a6bdb5a50f7d0ccacee502e191d3e3d0ec2f96f84a" +"checksum gleam 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "cae10d7c99d0e77b4766e850a60898a17c1abaf01075531f1066f03dc7dc5fc5" +"checksum glutin 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5371b35b309dace06be1b81b5f6adb1c9de578b7dbe1e74bf7e4ef762cf6febd" +"checksum glutin_egl_sys 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "772edef3b28b8ad41e4ea202748e65eefe8e5ffd1f4535f1219793dbb20b3d4c" +"checksum glutin_emscripten_sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "245b3fdb08df6ffed7585365851f8404af9c7e2dd4b59f15262e968b6a95a0c7" +"checksum glutin_gles2_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "89996c30857ae1b4de4b5189abf1ea822a20a9fe9e1c93e5e7b862ff0bdd5cdf" +"checksum glutin_glx_sys 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1290a5ca5e46fcfa7f66f949cc9d9194b2cb6f2ed61892c8c2b82343631dba57" +"checksum glutin_wgl_sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f801bbc91efc22dd1c4818a47814fc72bf74d024510451b119381579bfa39021" +"checksum hermit-abi 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f629dc602392d3ec14bfc8a09b5e644d7ffd725102b48b81e59f90f2633621d7" +"checksum image 0.22.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b4be8aaefbe7545dc42ae925afb55a0098f226a3fe5ef721872806f44f57826" +"checksum inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff" +"checksum interpolation 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b7357d2bbc5ee92f8e899ab645233e43d21407573cceb37fed8bc3dede2c02" +"checksum jpeg-decoder 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "0256f0aec7352539102a9efbcb75543227b7ab1117e0f95450023af730128451" +"checksum khronos_api 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "037ab472c33f67b5fbd3e9163a2645319e5356fcd355efa6d4eb7fff4bbcb554" +"checksum khronos_api 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" "checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" "checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" +"checksum libloading 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" +"checksum line_drawing 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5cc7ad3d82c845bdb5dde34ffdcc7a5fb4d2996e1e1ee0f19c33bc80e15196b9" +"checksum lock_api 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e57b3997725d2b60dbec1297f6c2e2957cc383db1cebd6be812163f969c7d586" "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" +"checksum lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084" +"checksum malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" +"checksum memmap 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" +"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" +"checksum nix 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6c722bee1037d430d0f8e687bbdbf222f27cc6e4e68d5caf630857bb2b6dbdce" +"checksum num-derive 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "eafd0b45c5537c3ba526f79d3e75120036502bebacbb3f3220914067ce39dbf2" "checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09" +"checksum num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "76bd5272412d173d6bf9afdf98db8612bbabc9a7a830b7bfc9c188911716132e" +"checksum num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2885278d5fe2adc2f75ced642d52d879bffaceb5a2e0b1d4309ffdfb239b454" "checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4" +"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72" +"checksum objc 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +"checksum ordered-float 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "18869315e81473c951eb56ad5558bbc56978562d3ecfb87abb7a1e944cea4518" +"checksum osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" +"checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" +"checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" +"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" "checksum phf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" "checksum phf_generator 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" "checksum phf_macros 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" "checksum phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +"checksum piston 0.49.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b20fda60cf7c0cf8fdbdac34a0418bea5480bb4a9ba73379c54ffd2a125f19f8" +"checksum piston-float 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f900be47e312e126cc71d35548e8e31edd3901b92ab82d1c4c4757e6b5526564" +"checksum piston-gfx_texture 0.40.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1f4376637e9e31ae65f4888516a7366ea4df1fd9f96babdc76d28ef91a5725db" +"checksum piston-graphics_api_version 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c54f48a0072e8b2490935bc46a3ddb50ca96fdc071f675e9296063598836b7ac" +"checksum piston-shaders_graphics2d 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "97bc17dac1dfff3e5cb84116062c7b46ff9d3dc0d88696a46d2f054cf64a10b6" +"checksum piston-texture 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "62c93564eef40a9920d026697f63d224efd7ac80981fb418fe1dad447c2d9bdd" +"checksum piston-viewport 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "01abb19b781051290d0837b9294c26d419cc4156907c21ffe86705e219446798" +"checksum piston2d-gfx_graphics 0.66.0 (registry+https://github.com/rust-lang/crates.io-index)" = "21ceef4c6c26a496b2e109ab7734a7fc26c97b2a00544c0303f91a9a8b9bb4de" +"checksum piston2d-graphics 0.35.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cf145cd97b579ad9e0aa19652a217be961021de8e2d0c2a039f20ad6ad72a2b7" +"checksum piston2d-opengl_graphics 0.70.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8feba5f0e4d6d0b4ed07a13e3cb545df30cd3bcc98b20caff33944b334653137" +"checksum piston_window 0.105.0 (registry+https://github.com/rust-lang/crates.io-index)" = "25c57d7b202d70d6c79787887bdb30bf07798d8a25e1358b98acdcf90a48c216" +"checksum pistoncore-event_loop 0.49.0 (registry+https://github.com/rust-lang/crates.io-index)" = "557307a26418afb123d77c8a8a6589f40a82e6a5ad7b94421aaf0bd2779231c1" +"checksum pistoncore-glutin_window 0.63.0 (registry+https://github.com/rust-lang/crates.io-index)" = "acc73c42620d0596b7eae0b1c766110cb98171c37501409a2027969d55f70b36" +"checksum pistoncore-input 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05730818d7db7272339b8e2e36c0dbe33697e3df793f94ba1d1525d06ffa2ce7" +"checksum pistoncore-window 0.44.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18041bc73291d9466796e300137d7cff82c9aab2ff7f1fe7fe4ca675ad1d1ea3" +"checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" +"checksum png 0.15.2 (registry+https://github.com/rust-lang/crates.io-index)" = "247cb804bd7fc86d0c2b153d1374265e67945875720136ca8fe451f11c6aed52" "checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" "checksum proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5" +"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" "checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27" +"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" "checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" "checksum rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3ae1b169243eaf61759b8475a998f0a385e42042370f3a7dbaf35246eacc8412" "checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853" "checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" "checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" "checksum rand_pcg 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +"checksum raw-window-handle 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0a441a7a6c80ad6473bd4b74ec1c9a4c951794285bf941c2126f607c72e48211" +"checksum rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098" +"checksum rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9" +"checksum read_color 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9f4c8858baa4ad3c8bcc156ae91a0ffe22b76a3975c40c49b4f04c15c6bce0da" "checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" "checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" +"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +"checksum rusttype 0.7.9 (registry+https://github.com/rust-lang/crates.io-index)" = "310942406a39981bed7e12b09182a221a29e0990f3e7e0c971f131922ed135d5" +"checksum rusttype 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "14a911032fb5791ccbeec9f28fdcb9bf0983b81f227bafdfd227c658d0731c8a" +"checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" +"checksum scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" +"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" +"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +"checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" +"checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" +"checksum shader_version 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "478e783fb7533629e19120ca01246884f8effff5f4d20ce81d34c7c47a2866fa" +"checksum shared_library 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" "checksum simple_logger 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3a4756ecc75607ba957820ac0a2413a6c27e6c61191cda0c62c6dcea4da88870" "checksum siphasher 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "83da420ee8d1a89e640d0948c646c1c088758d3a3c538f943bfa97bdac17929d" +"checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" +"checksum smithay-client-toolkit 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2ccb8c57049b2a34d2cc2b203fa785020ba0129d31920ef0d317430adaf748fa" +"checksum stb_truetype 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f77b6b07e862c66a9f3e62a07588fee67cd90a9135a2b942409f195507b4fb51" +"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" "checksum syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238" "checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" +"checksum tiff 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d7b7c2cfc4742bd8a32f2e614339dd8ce30dbcf676bb262bd63a2327bc5df57d" "checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" +"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" +"checksum vecmath 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "956ae1e0d85bca567dee1dcf87fb1ca2e792792f66f87dced8381f99cd91156a" +"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" +"checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e" "checksum wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d" +"checksum wayland-client 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "49963e5f9eeaf637bfcd1b9f0701c99fd5cd05225eb51035550d4272806f2713" +"checksum wayland-commons 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "40c08896768b667e1df195d88a62a53a2d1351a1ed96188be79c196b35bb32ec" +"checksum wayland-protocols 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "4afde2ea2a428eee6d7d2c8584fdbe8b82eee8b6c353e129a434cd6e07f42145" +"checksum wayland-scanner 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "bf3828c568714507315ee425a9529edc4a4aa9901409e373e9e0027e7622b79e" +"checksum wayland-sys 0.21.13 (registry+https://github.com/rust-lang/crates.io-index)" = "520ab0fd578017a0ee2206623ba9ef4afe5e8f23ca7b42f6acfba2f4e66b1628" "checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +"checksum winit 0.19.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1e96eb4bb472fa43e718e8fa4aef82f86cd9deac9483a1e1529230babdb394a8" +"checksum x11-dl 2.18.4 (registry+https://github.com/rust-lang/crates.io-index)" = "be65e1342a3baae65439cd03306778831a3d133b0d20243a7fb83fd5cf403c58" +"checksum xdg 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57" +"checksum xml-rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "541b12c998c5b56aa2b4e6f18f03664eef9a4fd0a246a55594efae6cc2d964b5" diff --git a/Cargo.toml b/Cargo.toml index f99747a..b6ff4fa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,9 @@ edition = "2018" test = [] [dependencies] -log = "*" -simple_logger = "*" +log = "0.4.*" +simple_logger = "1.3.*" phf = { version = "0.8", features = ['macros'] } -failure = "*" \ No newline at end of file +failure = "0.1.*" +piston_window = "0.105.*" +piston2d-opengl_graphics = "0.70.*" \ No newline at end of file diff --git a/resources/fonts/LICENSE.txt b/resources/fonts/LICENSE.txt new file mode 100644 index 0000000..141e49f --- /dev/null +++ b/resources/fonts/LICENSE.txt @@ -0,0 +1,94 @@ +Copyright (c) 2011, Cody "CodeMan38" Boisclair (cody@zone38.net), +with Reserved Font Name "Press Start". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/resources/fonts/PressStart2P.ttf b/resources/fonts/PressStart2P.ttf new file mode 100644 index 0000000000000000000000000000000000000000..98044e935e515b6b7c5eb562ea880a7b7dc5179c GIT binary patch literal 82480 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 literal 0 HcmV?d00001 diff --git a/src/cpu.rs b/src/cpu.rs index 1ba3a4d..d9204f7 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -7,12 +7,12 @@ use crate::types::*; use log::{debug}; pub struct Registers { - a: Byte, - x: Byte, - y: Byte, - sp: Byte, - pc: Addr, - flags: Byte + pub a: Byte, + pub x: Byte, + pub y: Byte, + pub sp: Byte, + pub pc: Addr, + pub flags: Byte } impl Registers { @@ -37,17 +37,17 @@ impl Debug for Registers { } -const CARRY: Byte = 1 << 0; -const ZERO: Byte = 1 << 1; -const IRQ: Byte = 1 << 2; -const DECIMAL: Byte = 1 << 3; -const BREAK: Byte = 1 << 4; -const UNUSED: Byte = 1 << 5; -const OVERFLOW: Byte = 1 << 6; -const NEGATIVE: Byte = 1 << 7; +pub const CARRY: Byte = 1 << 0; +pub const ZERO: Byte = 1 << 1; +pub const IRQ: Byte = 1 << 2; +pub const DECIMAL: Byte = 1 << 3; +pub const BREAK: Byte = 1 << 4; +pub const UNUSED: Byte = 1 << 5; +pub const OVERFLOW: Byte = 1 << 6; +pub const NEGATIVE: Byte = 1 << 7; pub struct CPU { - regs: Registers, + pub regs: Registers, curr_op: Byte, // current operation cycles: u8, // number of clock clycles the CPU is ahead of global clock } @@ -86,6 +86,11 @@ impl CPU { self.curr_op = 0x00; } + // True if the operation is not finished yet + pub fn is_ahead(&self) -> bool { + return self.cycles > 0; + } + fn readb(&self, bus: &T, addr: Addr) -> Byte { bus.readb(addr) } @@ -122,7 +127,7 @@ impl CPU { } } - fn get_flag(&mut self, flag: Byte) -> Byte { + pub fn get_flag(&self, flag: Byte) -> Byte { if self.regs.flags & flag > 0 { 1 } else { diff --git a/src/main.rs b/src/main.rs index 8e5b901..f4618d1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,18 +2,27 @@ #[macro_use] extern crate failure; extern crate simple_logger; extern crate phf; +extern crate piston_window; + #[allow(non_snake_case)] mod cpu; mod bus; mod types; +use std::path::Path; +use piston_window::*; use types::*; -use cpu::CPU; +use cpu::*; use bus::{MemoryBus, Bus}; +use opengl_graphics::OpenGL; +use log::Level; +use piston_window::Text; fn main() { - simple_logger::init().unwrap(); + simple_logger::init_with_level(Level::Debug).unwrap(); + let mut window: PistonWindow = WindowSettings::new("NESemu", [256*6, 240*4]) + .exit_on_esc(true).graphics_api(OpenGL::V3_2).build().unwrap(); let mut bus = MemoryBus::new(); @@ -30,12 +39,145 @@ fn main() { bus.writeb(0xfffc, offset as Byte); bus.writeb(0xfffc + 1, (offset >> 8) as Byte); + // Create and reset CPU let mut cpu: CPU = CPU::new(); cpu.reset(&bus); - for _ in 0..500+10 { - cpu.clock(&mut bus); - debug!("Mem: {} {} {}", bus.readb(0x00), bus.readb(0x01), bus.readb(0x02)) + + // Load font and start main loop + let font_path = Path::new("resources/fonts/PressStart2P.ttf"); + let mut glyphs = window.load_font(font_path).unwrap(); + while let Some(event) = window.next() { + if let Some(Button::Keyboard(key)) = event.press_args() { + if key == Key::C { // advance one clock + cpu.clock(&mut bus); + } else if key == Key::Space { // advance to next instruction + cpu.clock(&mut bus); + while cpu.is_ahead() { + cpu.clock(&mut bus); + } + } + } + render(&mut window, &event, &mut glyphs, &cpu, &bus); } - - } + +fn render(window: &mut PistonWindow, event: &Event, glyphs: &mut Glyphs, cpu: &CPU, bus: &dyn Bus) { + window.draw_2d(event, |c, g, d| { + clear([0.0, 0.0, 1.0, 1.0], g); + render_cpu(&c, g, glyphs, cpu); + render_pc(&c, g, glyphs, cpu, bus); + glyphs.factory.encoder.flush(d); + }); +} + +fn render_cpu(c: &Context, g: &mut G2d, glyphs: &mut Glyphs, cpu: &CPU) { + let font_size_pt = 36; + let color_white = [1.0; 4]; + let color_red = [1.0, 0.0, 0.0, 1.0]; + let color_green = [0.0, 1.0, 0.0, 1.0]; + + let font_scale = 0.25; + let font_size_px = 12; + + let line_distance = font_size_px as f64 * 0.5; + let x_dist = font_size_px as f64; + + let flags_y = line_distance + font_size_px as f64; + let mut flags_x_offset = x_dist; + let mut transform = c.transform.trans(x_dist, flags_y).scale(font_scale, font_scale); + Text::new_color(color_white, font_size_pt).draw( + &"Flags:", + glyphs, + &c.draw_state, + transform, + g + ); + transform = transform.trans(300.0, 0.0); + Text::new_color(if cpu.get_flag(NEGATIVE) == 1 { color_green} else { color_red } , font_size_pt).draw( + &"N", + glyphs, + &c.draw_state, + transform, + g + ); + transform = transform.trans(72.0, 0.0); + Text::new_color(if cpu.get_flag(OVERFLOW) == 1 { color_green} else { color_red } , font_size_pt).draw( + &"V", + glyphs, + &c.draw_state, + transform, + g + ); + transform = transform.trans(72.0, 0.0); + Text::new_color(color_white, font_size_pt).draw( + &"-", + glyphs, + &c.draw_state, + transform, + g + ); + transform = transform.trans(72.0, 0.0); + Text::new_color(if cpu.get_flag(BREAK) == 1 { color_green} else { color_red } , font_size_pt).draw( + &"B", + glyphs, + &c.draw_state, + transform, + g + ); + transform = transform.trans(72.0, 0.0); + Text::new_color(if cpu.get_flag(DECIMAL) == 1 { color_green} else { color_red } , font_size_pt).draw( + &"D", + glyphs, + &c.draw_state, + transform, + g + ); + transform = transform.trans(72.0, 0.0); + Text::new_color(if cpu.get_flag(IRQ) == 1 { color_green} else { color_red } , font_size_pt).draw( + &"I", + glyphs, + &c.draw_state, + transform, + g + ); + transform = transform.trans(72.0, 0.0); + Text::new_color(if cpu.get_flag(ZERO) == 1 { color_green} else { color_red } , font_size_pt).draw( + &"Z", + glyphs, + &c.draw_state, + transform, + g + ); + transform = transform.trans(72.0, 0.0); + Text::new_color(if cpu.get_flag(CARRY) == 1 { color_green} else { color_red } , font_size_pt).draw( + &"C", + glyphs, + &c.draw_state, + transform, + g + ); + + let cpu_register_texts = [ + &format!("A: {:#x} ({})", cpu.regs.a, cpu.regs.a), + &format!("X: {:#x} ({})", cpu.regs.x, cpu.regs.y), + &format!("Y: {:#x} ({})", cpu.regs.y, cpu.regs.x), + &format!("Stack P: {:#x} ({})", cpu.regs.sp, cpu.regs.sp), + &format!("Program P: {:#x}", cpu.regs.pc), + ]; + + for (i, &text) in cpu_register_texts.iter().enumerate() { + let y_dist: f64 = (i+2) as f64*(line_distance + font_size_px as f64); + let transform = c.transform.trans(x_dist, y_dist).scale(font_scale, font_scale); + Text::new_color(color_white, font_size_pt).draw( + &text, + glyphs, + &c.draw_state, + transform, + g + ); + } +} + +fn render_pc(c: &Context, g: &mut G2d, glyphs: &mut Glyphs, cpu: &CPU, bus: &dyn Bus) { + +} \ No newline at end of file