[INFO] cloning repository https://github.com/fdb/emunes
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/fdb/emunes" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffdb%2Femunes", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffdb%2Femunes'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 103512664ebd291df6830f10cee2681002ae98a0
[INFO] checking fdb/emunes/103512664ebd291df6830f10cee2681002ae98a0 against master#46424fb5054f211ec836c5c03159f92e46bb35ac for pr-139042
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffdb%2Femunes" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/fdb/emunes on toolchain 46424fb5054f211ec836c5c03159f92e46bb35ac
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+46424fb5054f211ec836c5c03159f92e46bb35ac" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking git repo https://github.com/fdb/emunes
[INFO] finished tweaking git repo https://github.com/fdb/emunes
[INFO] tweaked toml for git repo https://github.com/fdb/emunes written to /workspace/builds/worker-4-tc1/source/Cargo.toml
[INFO] crate git repo https://github.com/fdb/emunes already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+46424fb5054f211ec836c5c03159f92e46bb35ac" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: no edition set: defaulting to the 2015 edition while the latest is 2024
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded cfg-if v0.1.2
[INFO] [stderr]   Downloaded bitflags v1.0.1
[INFO] [stderr]   Downloaded num-traits v0.1.42
[INFO] [stderr]   Downloaded num v0.1.41
[INFO] [stderr]   Downloaded rand v0.3.20
[INFO] [stderr]   Downloaded sdl2 v0.31.0
[INFO] [stderr]   Downloaded libc v0.2.36
[INFO] [stderr]   Downloaded sdl2-sys v0.31.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4b26683ee3c49f365255c425c23003cbf4366de097804722c29c5bbbee3624d2" "/opt/rustwide/cargo-home/bin/cargo" "+46424fb5054f211ec836c5c03159f92e46bb35ac" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 0ccd24ede1bd3334926f84ec99fd777bb71560ffe16eaf8e013add360177ee17
[INFO] running `Command { std: "docker" "start" "-a" "0ccd24ede1bd3334926f84ec99fd777bb71560ffe16eaf8e013add360177ee17", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "0ccd24ede1bd3334926f84ec99fd777bb71560ffe16eaf8e013add360177ee17", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "0ccd24ede1bd3334926f84ec99fd777bb71560ffe16eaf8e013add360177ee17", kill_on_drop: false }`
[INFO] [stdout] 0ccd24ede1bd3334926f84ec99fd777bb71560ffe16eaf8e013add360177ee17
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4b26683ee3c49f365255c425c23003cbf4366de097804722c29c5bbbee3624d2" "/opt/rustwide/cargo-home/bin/cargo" "+46424fb5054f211ec836c5c03159f92e46bb35ac" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 631c53ef8441426385fe8d087f96ecb4f3dfd7aa69beea9c3b252b1afc18bc24
[INFO] running `Command { std: "docker" "start" "-a" "631c53ef8441426385fe8d087f96ecb4f3dfd7aa69beea9c3b252b1afc18bc24", kill_on_drop: false }`
[INFO] [stderr] warning: no edition set: defaulting to the 2015 edition while the latest is 2024
[INFO] [stderr]    Compiling cfg-if v0.1.2
[INFO] [stderr]     Checking num-traits v0.1.42
[INFO] [stderr]     Checking libc v0.2.36
[INFO] [stderr]     Checking lazy_static v0.2.11
[INFO] [stderr]     Checking bitflags v0.7.0
[INFO] [stderr]     Checking bitflags v1.0.1
[INFO] [stderr]    Compiling sdl2-sys v0.31.0
[INFO] [stderr]     Checking rand v0.3.20
[INFO] [stderr]     Checking num-integer v0.1.35
[INFO] [stderr]     Checking num-iter v0.1.34
[INFO] [stderr]     Checking num v0.1.41
[INFO] [stderr]     Checking sdl2 v0.31.0
[INFO] [stderr]     Checking emunes v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `sdl2::render::TextureQuery`
[INFO] [stdout]   --> src/main.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use sdl2::render::TextureQuery;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]    --> src/cpu.rs:89:1
[INFO] [stdout]     |
[INFO] [stdout] 89  | / bitflags! {
[INFO] [stdout] 90  | |     #[derive(Default)]
[INFO] [stdout] 91  | |     pub struct Flags: u8 {
[INFO] [stdout] 92  | |         const CARRY             = 1 << 0;
[INFO] [stdout] ...   |
[INFO] [stdout] 101 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout]     = note: this warning originates in the macro `__impl_bitflags` which comes from the expansion of the macro `bitflags` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]    --> src/cpu.rs:89:1
[INFO] [stdout]     |
[INFO] [stdout] 89  | / bitflags! {
[INFO] [stdout] 90  | |     #[derive(Default)]
[INFO] [stdout] 91  | |     pub struct Flags: u8 {
[INFO] [stdout] 92  | |         const CARRY             = 1 << 0;
[INFO] [stdout] ...   |
[INFO] [stdout] 101 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `__impl_bitflags` which comes from the expansion of the macro `bitflags` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]    --> src/cpu.rs:89:1
[INFO] [stdout]     |
[INFO] [stdout] 89  | / bitflags! {
[INFO] [stdout] 90  | |     #[derive(Default)]
[INFO] [stdout] 91  | |     pub struct Flags: u8 {
[INFO] [stdout] 92  | |         const CARRY             = 1 << 0;
[INFO] [stdout] ...   |
[INFO] [stdout] 101 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `__impl_bitflags` which comes from the expansion of the macro `bitflags` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around method argument
[INFO] [stdout]    --> src/cpu.rs:203:47
[INFO] [stdout]     |
[INFO] [stdout] 203 |                 let address = bus.read_16_bug((bus.read(self.pc + 1) as u16))
[INFO] [stdout]     |                                               ^                            ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 203 -                 let address = bus.read_16_bug((bus.read(self.pc + 1) as u16))
[INFO] [stdout] 203 +                 let address = bus.read_16_bug(bus.read(self.pc + 1) as u16)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/cpu.rs:218:17
[INFO] [stdout]     |
[INFO] [stdout] 218 |                 ((bus.read(self.pc + 1) as u16).wrapping_add(self.x as u16) & 0xFF as u16)
[INFO] [stdout]     |                 ^                                                                        ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 218 -                 ((bus.read(self.pc + 1) as u16).wrapping_add(self.x as u16) & 0xFF as u16)
[INFO] [stdout] 218 +                 (bus.read(self.pc + 1) as u16).wrapping_add(self.x as u16) & 0xFF as u16
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/cpu.rs:221:17
[INFO] [stdout]     |
[INFO] [stdout] 221 |                 ((bus.read(self.pc + 1) as u16).wrapping_add(self.y as u16) & 0xFF as u16)
[INFO] [stdout]     |                 ^                                                                        ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 221 -                 ((bus.read(self.pc + 1) as u16).wrapping_add(self.y as u16) & 0xFF as u16)
[INFO] [stdout] 221 +                 (bus.read(self.pc + 1) as u16).wrapping_add(self.y as u16) & 0xFF as u16
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:33:19
[INFO] [stdout]    |
[INFO] [stdout] 33 |             0x0000...0x1FFF => self.ram[(address % 0x2000) as usize],
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout]    = note: `#[warn(ellipsis_inclusive_range_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:34:19
[INFO] [stdout]    |
[INFO] [stdout] 34 |             0x2000...0x3FFF => 0xCC, // TODO: self.ppu.read_register(0x2000 + address % 8)
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:35:19
[INFO] [stdout]    |
[INFO] [stdout] 35 |             0x4000...0x4013 => 0xFF, // TODO: read from APU registers
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:40:19
[INFO] [stdout]    |
[INFO] [stdout] 40 |             0x4018...0x5FFF => 0xFF, // TODO: I/O registers
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:41:19
[INFO] [stdout]    |
[INFO] [stdout] 41 |             0x6000...0xFFFF => self.mapper_read(address),
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:59:19
[INFO] [stdout]    |
[INFO] [stdout] 59 |             0x0000...0x1FFF => self.ram[(address % 2048) as usize] = value,
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:60:19
[INFO] [stdout]    |
[INFO] [stdout] 60 |             0x4000...0x4013 | 0x4015 => {
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:69:19
[INFO] [stdout]    |
[INFO] [stdout] 69 |             0x0000...0x2000 => self.cartridge.chr[address as usize],
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:70:19
[INFO] [stdout]    |
[INFO] [stdout] 70 |             0x6000...0x7FFF => 0xCC, // TODO: self.cartridge.sram[address - 0x6000]
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:71:19
[INFO] [stdout]    |
[INFO] [stdout] 71 |             0x8000...0xBFFF => self.cartridge.prg[(address - 0x8000) as usize],
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:72:19
[INFO] [stdout]    |
[INFO] [stdout] 72 |             0xC000...0xFFFF => self.cartridge.prg[(address - 0xC000) as usize],
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:80:19
[INFO] [stdout]    |
[INFO] [stdout] 80 |             0x0000...0x1FFF => self.mapper_read(address),
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:81:19
[INFO] [stdout]    |
[INFO] [stdout] 81 |             0x2000...0x3F00 => {
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:86:19
[INFO] [stdout]    |
[INFO] [stdout] 86 |             0x3F00...0x4000 => self.ppu_palette[(address % 32) as usize],
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]    --> src/main.rs:112:19
[INFO] [stdout]     |
[INFO] [stdout] 112 |             0x0000...0x2000 => self.cartridge.chr[address as usize],
[INFO] [stdout]     |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]    --> src/main.rs:113:19
[INFO] [stdout]     |
[INFO] [stdout] 113 |             0x2001...0xC000 => self.cartridge.prg[address as usize],
[INFO] [stdout]     |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]    --> src/main.rs:120:19
[INFO] [stdout]     |
[INFO] [stdout] 120 |             0x0000...0x2000 => self.cartridge.chr[address as usize] = value,
[INFO] [stdout]     |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]    --> src/main.rs:121:19
[INFO] [stdout]     |
[INFO] [stdout] 121 |             0x2001...0xC000 => self.cartridge.prg[address as usize] = value,
[INFO] [stdout]     |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `sdl2::render::TextureQuery`
[INFO] [stdout]   --> src/main.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use sdl2::render::TextureQuery;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]    --> src/cpu.rs:89:1
[INFO] [stdout]     |
[INFO] [stdout] 89  | / bitflags! {
[INFO] [stdout] 90  | |     #[derive(Default)]
[INFO] [stdout] 91  | |     pub struct Flags: u8 {
[INFO] [stdout] 92  | |         const CARRY             = 1 << 0;
[INFO] [stdout] ...   |
[INFO] [stdout] 101 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout]     = note: this warning originates in the macro `__impl_bitflags` which comes from the expansion of the macro `bitflags` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]    --> src/cpu.rs:89:1
[INFO] [stdout]     |
[INFO] [stdout] 89  | / bitflags! {
[INFO] [stdout] 90  | |     #[derive(Default)]
[INFO] [stdout] 91  | |     pub struct Flags: u8 {
[INFO] [stdout] 92  | |         const CARRY             = 1 << 0;
[INFO] [stdout] ...   |
[INFO] [stdout] 101 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `__impl_bitflags` which comes from the expansion of the macro `bitflags` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated macro `try`: use the `?` operator instead
[INFO] [stdout]    --> src/cpu.rs:89:1
[INFO] [stdout]     |
[INFO] [stdout] 89  | / bitflags! {
[INFO] [stdout] 90  | |     #[derive(Default)]
[INFO] [stdout] 91  | |     pub struct Flags: u8 {
[INFO] [stdout] 92  | |         const CARRY             = 1 << 0;
[INFO] [stdout] ...   |
[INFO] [stdout] 101 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `__impl_bitflags` which comes from the expansion of the macro `bitflags` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around method argument
[INFO] [stdout]    --> src/cpu.rs:203:47
[INFO] [stdout]     |
[INFO] [stdout] 203 |                 let address = bus.read_16_bug((bus.read(self.pc + 1) as u16))
[INFO] [stdout]     |                                               ^                            ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 203 -                 let address = bus.read_16_bug((bus.read(self.pc + 1) as u16))
[INFO] [stdout] 203 +                 let address = bus.read_16_bug(bus.read(self.pc + 1) as u16)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/cpu.rs:218:17
[INFO] [stdout]     |
[INFO] [stdout] 218 |                 ((bus.read(self.pc + 1) as u16).wrapping_add(self.x as u16) & 0xFF as u16)
[INFO] [stdout]     |                 ^                                                                        ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 218 -                 ((bus.read(self.pc + 1) as u16).wrapping_add(self.x as u16) & 0xFF as u16)
[INFO] [stdout] 218 +                 (bus.read(self.pc + 1) as u16).wrapping_add(self.x as u16) & 0xFF as u16
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/cpu.rs:221:17
[INFO] [stdout]     |
[INFO] [stdout] 221 |                 ((bus.read(self.pc + 1) as u16).wrapping_add(self.y as u16) & 0xFF as u16)
[INFO] [stdout]     |                 ^                                                                        ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 221 -                 ((bus.read(self.pc + 1) as u16).wrapping_add(self.y as u16) & 0xFF as u16)
[INFO] [stdout] 221 +                 (bus.read(self.pc + 1) as u16).wrapping_add(self.y as u16) & 0xFF as u16
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:33:19
[INFO] [stdout]    |
[INFO] [stdout] 33 |             0x0000...0x1FFF => self.ram[(address % 0x2000) as usize],
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout]    = note: `#[warn(ellipsis_inclusive_range_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:34:19
[INFO] [stdout]    |
[INFO] [stdout] 34 |             0x2000...0x3FFF => 0xCC, // TODO: self.ppu.read_register(0x2000 + address % 8)
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:35:19
[INFO] [stdout]    |
[INFO] [stdout] 35 |             0x4000...0x4013 => 0xFF, // TODO: read from APU registers
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:40:19
[INFO] [stdout]    |
[INFO] [stdout] 40 |             0x4018...0x5FFF => 0xFF, // TODO: I/O registers
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:41:19
[INFO] [stdout]    |
[INFO] [stdout] 41 |             0x6000...0xFFFF => self.mapper_read(address),
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:59:19
[INFO] [stdout]    |
[INFO] [stdout] 59 |             0x0000...0x1FFF => self.ram[(address % 2048) as usize] = value,
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:60:19
[INFO] [stdout]    |
[INFO] [stdout] 60 |             0x4000...0x4013 | 0x4015 => {
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:69:19
[INFO] [stdout]    |
[INFO] [stdout] 69 |             0x0000...0x2000 => self.cartridge.chr[address as usize],
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:70:19
[INFO] [stdout]    |
[INFO] [stdout] 70 |             0x6000...0x7FFF => 0xCC, // TODO: self.cartridge.sram[address - 0x6000]
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:71:19
[INFO] [stdout]    |
[INFO] [stdout] 71 |             0x8000...0xBFFF => self.cartridge.prg[(address - 0x8000) as usize],
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:72:19
[INFO] [stdout]    |
[INFO] [stdout] 72 |             0xC000...0xFFFF => self.cartridge.prg[(address - 0xC000) as usize],
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:80:19
[INFO] [stdout]    |
[INFO] [stdout] 80 |             0x0000...0x1FFF => self.mapper_read(address),
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:81:19
[INFO] [stdout]    |
[INFO] [stdout] 81 |             0x2000...0x3F00 => {
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]   --> src/bus.rs:86:19
[INFO] [stdout]    |
[INFO] [stdout] 86 |             0x3F00...0x4000 => self.ppu_palette[(address % 32) as usize],
[INFO] [stdout]    |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]    --> src/main.rs:112:19
[INFO] [stdout]     |
[INFO] [stdout] 112 |             0x0000...0x2000 => self.cartridge.chr[address as usize],
[INFO] [stdout]     |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]    --> src/main.rs:113:19
[INFO] [stdout]     |
[INFO] [stdout] 113 |             0x2001...0xC000 => self.cartridge.prg[address as usize],
[INFO] [stdout]     |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]    --> src/main.rs:120:19
[INFO] [stdout]     |
[INFO] [stdout] 120 |             0x0000...0x2000 => self.cartridge.chr[address as usize] = value,
[INFO] [stdout]     |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: `...` range patterns are deprecated
[INFO] [stdout]    --> src/main.rs:121:19
[INFO] [stdout]     |
[INFO] [stdout] 121 |             0x2001...0xC000 => self.cartridge.prg[address as usize] = value,
[INFO] [stdout]     |                   ^^^ help: use `..=` for an inclusive range
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `bitflags::core::str::<impl str>::trim_right`: superseded by `trim_end`
[INFO] [stdout]    --> src/main.rs:523:37
[INFO] [stdout]     |
[INFO] [stdout] 523 |             let expected = expected.trim_right().to_owned();
[INFO] [stdout]     |                                     ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: replace the use of the deprecated method
[INFO] [stdout]     |
[INFO] [stdout] 523 -             let expected = expected.trim_right().to_owned();
[INFO] [stdout] 523 +             let expected = expected.trim_end().to_owned();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/cpu.rs:812:21
[INFO] [stdout]     |
[INFO] [stdout] 812 |                 let mut c: u8 = if self.flags.intersects(Flags::CARRY) {
[INFO] [stdout]     |                     ----^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `render_line`
[INFO] [stdout]    --> src/ppu.rs:122:13
[INFO] [stdout]     |
[INFO] [stdout] 122 |         let render_line = pre_line || visible_line;
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_render_line`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bus`
[INFO] [stdout]    --> src/ppu.rs:118:28
[INFO] [stdout]     |
[INFO] [stdout] 118 |     pub fn step(&mut self, bus: &mut Bus) {
[INFO] [stdout]     |                            ^^^ help: if this is intentional, prefix it with an underscore: `_bus`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/bus.rs:42:13
[INFO] [stdout]    |
[INFO] [stdout] 42 |             _ => panic!("Invalid bus memory read at address {:04X}", address),
[INFO] [stdout]    |             ^ no value can reach this
[INFO] [stdout]    |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]   --> src/bus.rs:42:13
[INFO] [stdout]    |
[INFO] [stdout] 33 |             0x0000...0x1FFF => self.ram[(address % 0x2000) as usize],
[INFO] [stdout]    |             --------------- matches some of the same values
[INFO] [stdout] 34 |             0x2000...0x3FFF => 0xCC, // TODO: self.ppu.read_register(0x2000 + address % 8)
[INFO] [stdout]    |             --------------- matches some of the same values
[INFO] [stdout] 35 |             0x4000...0x4013 => 0xFF, // TODO: read from APU registers
[INFO] [stdout]    |             --------------- matches some of the same values
[INFO] [stdout] 36 |             0x4014 => 0xCC,          // TODO: self.ppu.read_register(address)
[INFO] [stdout]    |             ------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 42 |             _ => panic!("Invalid bus memory read at address {:04X}", address),
[INFO] [stdout]    |             ^ ...and 5 other patterns collectively make this unreachable
[INFO] [stdout]    = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple patterns overlap on their endpoints
[INFO] [stdout]   --> src/bus.rs:86:13
[INFO] [stdout]    |
[INFO] [stdout] 81 |             0x2000...0x3F00 => {
[INFO] [stdout]    |             --------------- this range overlaps on `16128_u16`...
[INFO] [stdout] ...
[INFO] [stdout] 86 |             0x3F00...0x4000 => self.ppu_palette[(address % 32) as usize],
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^ ... with this range
[INFO] [stdout]    |
[INFO] [stdout]    = note: you likely meant to write mutually exclusive ranges
[INFO] [stdout]    = note: `#[warn(overlapping_range_endpoints)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `mode`
[INFO] [stdout]   --> src/bus.rs:82:21
[INFO] [stdout]    |
[INFO] [stdout] 82 |                 let mode = self.cartridge.mirror_mode;
[INFO] [stdout]    |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_mode`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bus`
[INFO] [stdout]   --> src/apu.rs:53:28
[INFO] [stdout]    |
[INFO] [stdout] 53 |     pub fn step(&mut self, bus: &mut Bus) {
[INFO] [stdout]    |                            ^^^ help: if this is intentional, prefix it with an underscore: `_bus`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buffer`
[INFO] [stdout]    --> src/main.rs:232:13
[INFO] [stdout]     |
[INFO] [stdout] 232 |     let mut buffer: Vec<u32> = vec![0; WINDOW_WIDTH * WINDOW_HEIGHT];
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_buffer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `b1`
[INFO] [stdout]    --> src/main.rs:245:21
[INFO] [stdout]     |
[INFO] [stdout] 245 |                 let b1 = (plane1 >> ((7 - ((x % 8) as u8)) as usize)) & 1;
[INFO] [stdout]     |                     ^^ help: if this is intentional, prefix it with an underscore: `_b1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:232:9
[INFO] [stdout]     |
[INFO] [stdout] 232 |     let mut buffer: Vec<u32> = vec![0; WINDOW_WIDTH * WINDOW_HEIGHT];
[INFO] [stdout]     |         ----^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:314:9
[INFO] [stdout]     |
[INFO] [stdout] 314 |     let mut current_cps = 0;
[INFO] [stdout]     |         ----^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `log` is never used
[INFO] [stdout]    --> src/cpu.rs:325:12
[INFO] [stdout]     |
[INFO] [stdout] 119 | impl CPU {
[INFO] [stdout]     | -------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn log(&mut self, bus: &Bus) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PALETTE` is never used
[INFO] [stdout]  --> src/ppu.rs:3:7
[INFO] [stdout]   |
[INFO] [stdout] 3 | const PALETTE: [u32; 64] = [
[INFO] [stdout]   |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/ppu.rs:24:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct PPU {
[INFO] [stdout]    |            --- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub sprite_count: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 25 |     pub sprite_patterns: [u32; 8],
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 26 |     pub sprite_positions: [u8; 8],
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub grayscale_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 30 |     pub show_left_background_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 31 |     pub show_left_sprites_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 32 |     pub show_background_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 33 |     pub show_sprites_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 34 |     pub red_tint_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 35 |     pub green_tint_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 36 |     pub blue_tint_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 37 |
[INFO] [stdout] 38 |     pub tile_data: u64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 39 |     pub palette_data: [u8; 32],
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `fetch_tile_data`, `background_pixel`, `sprite_pixel`, `read_palette`, and `render_pixel` are never used
[INFO] [stdout]   --> src/ppu.rs:67:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl PPU {
[INFO] [stdout]    | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub fn fetch_tile_data(&self) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub fn background_pixel(&mut self) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub fn sprite_pixel(&mut self) -> (u8, u8) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn read_palette(&self, address: u16) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 95 |     pub fn render_pixel(&mut self, bus: &mut Bus) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `ppu_name_table`, `ppu_palette`, and `ppu_oam` are never read
[INFO] [stdout]   --> src/bus.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 6  | pub struct Bus {
[INFO] [stdout]    |            --- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 10 |     pub ppu_name_table: [u8; 2048],
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 11 |     pub ppu_palette: [u8; 32],
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 12 |     pub ppu_oam: [u8; 256],
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `ppu_read` is never used
[INFO] [stdout]   --> src/bus.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Bus {
[INFO] [stdout]    | -------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn ppu_read(&self, address: u16) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUDIO_BUFFER_SIZE` is never used
[INFO] [stdout]  --> src/apu.rs:3:7
[INFO] [stdout]   |
[INFO] [stdout] 3 | const AUDIO_BUFFER_SIZE: u32 = 50 * 1024;
[INFO] [stdout]   |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LENGTH_TABLE` is never used
[INFO] [stdout]  --> src/apu.rs:4:7
[INFO] [stdout]   |
[INFO] [stdout] 4 | const LENGTH_TABLE: [u8; 32] = [
[INFO] [stdout]   |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DUTY_TABLE` is never used
[INFO] [stdout]  --> src/apu.rs:8:7
[INFO] [stdout]   |
[INFO] [stdout] 8 | const DUTY_TABLE: [[u8; 8]; 4] = [
[INFO] [stdout]   |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sample_rate` is never read
[INFO] [stdout]   --> src/apu.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct APU {
[INFO] [stdout]    |            --- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub sample_rate: u32
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `square_wave` is never used
[INFO] [stdout]   --> src/apu.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl APU {
[INFO] [stdout]    | -------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn square_wave(&mut self, bus: &mut Bus, tone_hz: u32) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Pulse` is never constructed
[INFO] [stdout]   --> src/apu.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub struct Pulse {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/apu.rs:86:12
[INFO] [stdout]     |
[INFO] [stdout] 85  | impl Pulse {
[INFO] [stdout]     | ---------- methods in this implementation
[INFO] [stdout] 86  |     pub fn write_control(&mut self, value: u8) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 96  |     pub fn write_sweep(&mut self, value: u8) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn write_timer_low(&mut self, value: u8) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn write_timer_high(&mut self, value: u8) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn step_timer(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn step_envelope(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn step_sweep(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn step_length(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn sweep(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn output(&mut self) -> u8 {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/cpu.rs:812:21
[INFO] [stdout]     |
[INFO] [stdout] 812 |                 let mut c: u8 = if self.flags.intersects(Flags::CARRY) {
[INFO] [stdout]     |                     ----^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `render_line`
[INFO] [stdout]    --> src/ppu.rs:122:13
[INFO] [stdout]     |
[INFO] [stdout] 122 |         let render_line = pre_line || visible_line;
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_render_line`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bus`
[INFO] [stdout]    --> src/ppu.rs:118:28
[INFO] [stdout]     |
[INFO] [stdout] 118 |     pub fn step(&mut self, bus: &mut Bus) {
[INFO] [stdout]     |                            ^^^ help: if this is intentional, prefix it with an underscore: `_bus`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]   --> src/bus.rs:42:13
[INFO] [stdout]    |
[INFO] [stdout] 42 |             _ => panic!("Invalid bus memory read at address {:04X}", address),
[INFO] [stdout]    |             ^ no value can reach this
[INFO] [stdout]    |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]   --> src/bus.rs:42:13
[INFO] [stdout]    |
[INFO] [stdout] 33 |             0x0000...0x1FFF => self.ram[(address % 0x2000) as usize],
[INFO] [stdout]    |             --------------- matches some of the same values
[INFO] [stdout] 34 |             0x2000...0x3FFF => 0xCC, // TODO: self.ppu.read_register(0x2000 + address % 8)
[INFO] [stdout]    |             --------------- matches some of the same values
[INFO] [stdout] 35 |             0x4000...0x4013 => 0xFF, // TODO: read from APU registers
[INFO] [stdout]    |             --------------- matches some of the same values
[INFO] [stdout] 36 |             0x4014 => 0xCC,          // TODO: self.ppu.read_register(address)
[INFO] [stdout]    |             ------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 42 |             _ => panic!("Invalid bus memory read at address {:04X}", address),
[INFO] [stdout]    |             ^ ...and 5 other patterns collectively make this unreachable
[INFO] [stdout]    = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple patterns overlap on their endpoints
[INFO] [stdout]   --> src/bus.rs:86:13
[INFO] [stdout]    |
[INFO] [stdout] 81 |             0x2000...0x3F00 => {
[INFO] [stdout]    |             --------------- this range overlaps on `16128_u16`...
[INFO] [stdout] ...
[INFO] [stdout] 86 |             0x3F00...0x4000 => self.ppu_palette[(address % 32) as usize],
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^ ... with this range
[INFO] [stdout]    |
[INFO] [stdout]    = note: you likely meant to write mutually exclusive ranges
[INFO] [stdout]    = note: `#[warn(overlapping_range_endpoints)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `mode`
[INFO] [stdout]   --> src/bus.rs:82:21
[INFO] [stdout]    |
[INFO] [stdout] 82 |                 let mode = self.cartridge.mirror_mode;
[INFO] [stdout]    |                     ^^^^ help: if this is intentional, prefix it with an underscore: `_mode`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bus`
[INFO] [stdout]   --> src/apu.rs:53:28
[INFO] [stdout]    |
[INFO] [stdout] 53 |     pub fn step(&mut self, bus: &mut Bus) {
[INFO] [stdout]    |                            ^^^ help: if this is intentional, prefix it with an underscore: `_bus`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buffer`
[INFO] [stdout]    --> src/main.rs:232:13
[INFO] [stdout]     |
[INFO] [stdout] 232 |     let mut buffer: Vec<u32> = vec![0; WINDOW_WIDTH * WINDOW_HEIGHT];
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_buffer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `b1`
[INFO] [stdout]    --> src/main.rs:245:21
[INFO] [stdout]     |
[INFO] [stdout] 245 |                 let b1 = (plane1 >> ((7 - ((x % 8) as u8)) as usize)) & 1;
[INFO] [stdout]     |                     ^^ help: if this is intentional, prefix it with an underscore: `_b1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:232:9
[INFO] [stdout]     |
[INFO] [stdout] 232 |     let mut buffer: Vec<u32> = vec![0; WINDOW_WIDTH * WINDOW_HEIGHT];
[INFO] [stdout]     |         ----^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:314:9
[INFO] [stdout]     |
[INFO] [stdout] 314 |     let mut current_cps = 0;
[INFO] [stdout]     |         ----^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `log_string` is never used
[INFO] [stdout]   --> src/console.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl Console {
[INFO] [stdout]    | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub fn log_string(&mut self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `log_string` and `log` are never used
[INFO] [stdout]    --> src/cpu.rs:246:12
[INFO] [stdout]     |
[INFO] [stdout] 119 | impl CPU {
[INFO] [stdout]     | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 246 |     pub fn log_string(&mut self, bus: &Bus) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn log(&mut self, bus: &Bus) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PALETTE` is never used
[INFO] [stdout]  --> src/ppu.rs:3:7
[INFO] [stdout]   |
[INFO] [stdout] 3 | const PALETTE: [u32; 64] = [
[INFO] [stdout]   |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/ppu.rs:24:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct PPU {
[INFO] [stdout]    |            --- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub sprite_count: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 25 |     pub sprite_patterns: [u32; 8],
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 26 |     pub sprite_positions: [u8; 8],
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub grayscale_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 30 |     pub show_left_background_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 31 |     pub show_left_sprites_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 32 |     pub show_background_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 33 |     pub show_sprites_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 34 |     pub red_tint_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 35 |     pub green_tint_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 36 |     pub blue_tint_flag: u8,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 37 |
[INFO] [stdout] 38 |     pub tile_data: u64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 39 |     pub palette_data: [u8; 32],
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `fetch_tile_data`, `background_pixel`, `sprite_pixel`, `read_palette`, and `render_pixel` are never used
[INFO] [stdout]   --> src/ppu.rs:67:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | impl PPU {
[INFO] [stdout]    | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub fn fetch_tile_data(&self) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub fn background_pixel(&mut self) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub fn sprite_pixel(&mut self) -> (u8, u8) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn read_palette(&self, address: u16) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 95 |     pub fn render_pixel(&mut self, bus: &mut Bus) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `ppu_name_table`, `ppu_palette`, and `ppu_oam` are never read
[INFO] [stdout]   --> src/bus.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 6  | pub struct Bus {
[INFO] [stdout]    |            --- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 10 |     pub ppu_name_table: [u8; 2048],
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 11 |     pub ppu_palette: [u8; 32],
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 12 |     pub ppu_oam: [u8; 256],
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `ppu_read` is never used
[INFO] [stdout]   --> src/bus.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Bus {
[INFO] [stdout]    | -------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn ppu_read(&self, address: u16) -> u8 {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `AUDIO_BUFFER_SIZE` is never used
[INFO] [stdout]  --> src/apu.rs:3:7
[INFO] [stdout]   |
[INFO] [stdout] 3 | const AUDIO_BUFFER_SIZE: u32 = 50 * 1024;
[INFO] [stdout]   |       ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LENGTH_TABLE` is never used
[INFO] [stdout]  --> src/apu.rs:4:7
[INFO] [stdout]   |
[INFO] [stdout] 4 | const LENGTH_TABLE: [u8; 32] = [
[INFO] [stdout]   |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DUTY_TABLE` is never used
[INFO] [stdout]  --> src/apu.rs:8:7
[INFO] [stdout]   |
[INFO] [stdout] 8 | const DUTY_TABLE: [[u8; 8]; 4] = [
[INFO] [stdout]   |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `sample_rate` is never read
[INFO] [stdout]   --> src/apu.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct APU {
[INFO] [stdout]    |            --- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub sample_rate: u32
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `square_wave` is never used
[INFO] [stdout]   --> src/apu.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl APU {
[INFO] [stdout]    | -------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn square_wave(&mut self, bus: &mut Bus, tone_hz: u32) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Pulse` is never constructed
[INFO] [stdout]   --> src/apu.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub struct Pulse {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/apu.rs:86:12
[INFO] [stdout]     |
[INFO] [stdout] 85  | impl Pulse {
[INFO] [stdout]     | ---------- methods in this implementation
[INFO] [stdout] 86  |     pub fn write_control(&mut self, value: u8) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 96  |     pub fn write_sweep(&mut self, value: u8) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn write_timer_low(&mut self, value: u8) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     pub fn write_timer_high(&mut self, value: u8) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn step_timer(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn step_envelope(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn step_sweep(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn step_length(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn sweep(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn output(&mut self) -> u8 {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.57s
[INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: bitflags v0.7.0
[INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 1`
[INFO] running `Command { std: "docker" "inspect" "631c53ef8441426385fe8d087f96ecb4f3dfd7aa69beea9c3b252b1afc18bc24", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "631c53ef8441426385fe8d087f96ecb4f3dfd7aa69beea9c3b252b1afc18bc24", kill_on_drop: false }`
[INFO] [stdout] 631c53ef8441426385fe8d087f96ecb4f3dfd7aa69beea9c3b252b1afc18bc24
