From a10d85d73f398b75dc8b407b3cf4621e5a976312 Mon Sep 17 00:00:00 2001 From: Matthias Endler Date: Sun, 4 Nov 2018 21:39:15 +0100 Subject: [PATCH 01/36] Formatting --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e139081..3d16a5d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Build Status](https://travis-ci.org/mre/mos6502.svg?branch=master)](https://travis-ci.org/mre/mos6502) -An emulator for the [MOS 6502 CPU](https://en.wikipedia.org/wiki/MOS_Technology_6502) written in Rust. +An emulator for the [MOS 6502 CPU](https://en.wikipedia.org/wiki/MOS_Technology_6502) written in Rust. This started off as a fork of [6502-rs](https://github.com/amw-zero/6502-rs), which seems to be unmaintained at this point. From e46f5b2495b7c7be956aa5c8312ad365668eb62e Mon Sep 17 00:00:00 2001 From: Matthias Endler Date: Sun, 4 Nov 2018 21:54:09 +0100 Subject: [PATCH 02/36] Clarification --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3d16a5d..9caa234 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Build Status](https://travis-ci.org/mre/mos6502.svg?branch=master)](https://travis-ci.org/mre/mos6502) An emulator for the [MOS 6502 CPU](https://en.wikipedia.org/wiki/MOS_Technology_6502) written in Rust. -This started off as a fork of [6502-rs](https://github.com/amw-zero/6502-rs), +This started off as a fork of [amw-zero/6502-rs](https://github.com/amw-zero/6502-rs), which seems to be unmaintained at this point. It builds with the latest stable Rust and supports `#[no_std]` targets. From cb2658f3e3ece728d987836045a79111fdb9ee14 Mon Sep 17 00:00:00 2001 From: Andrey Kutejko Date: Sun, 6 Oct 2019 18:56:51 +0200 Subject: [PATCH 03/36] update bitflags --- Cargo.lock | 377 +++++++++++++++++++++++++---------------------- Cargo.toml | 2 +- src/cpu.rs | 365 +++++++++++++++++++++++---------------------- src/registers.rs | 16 +- 4 files changed, 394 insertions(+), 366 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0664e70..877112d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,81 +1,74 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. [[package]] -name = "backtrace" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "backtrace-sys" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "bitflags" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "bitflags" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "bytecount" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cargo_metadata" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cc" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "cfg-if" +name = "autocfg" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "backtrace" +version = "0.3.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace-sys 0.1.31 (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.62 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "bitflags" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bytecount" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cargo_metadata" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cc" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "error-chain" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "backtrace 0.3.38 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" +name = "fuchsia-cprng" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -85,30 +78,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "itoa" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" -version = "0.2.43" +version = "0.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "log" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "mos6502" version = "0.1.0" dependencies = [ - "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "skeptic 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)", + "skeptic 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -116,110 +109,140 @@ name = "num" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", - "num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)", - "num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num-complex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.41 (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.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-complex" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-integer" -version = "0.1.39" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-iter" -version = "0.1.37" +version = "0.1.39" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.6 (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.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-rational" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 0.1.6 (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.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-traits" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "proc-macro2" -version = "0.4.20" +version = "1.0.5" 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)", + "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "pulldown-cmark" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "quote" -version = "0.6.9" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rand" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "remove_dir_all" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rustc-demangle" -version = "0.1.9" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "ryu" -version = "0.2.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "same-file" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -228,7 +251,7 @@ 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)", - "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -238,52 +261,52 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" -version = "1.0.80" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde_derive" -version = "1.0.80" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.18 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.5 (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.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "serde_json" -version = "1.0.32" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "skeptic" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bytecount 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "cargo_metadata 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)", - "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bytecount 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cargo_metadata 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "pulldown-cmark 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", + "pulldown-cmark 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "syn" -version = "0.15.18" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -291,28 +314,33 @@ name = "tempdir" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", + "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "unicode-xid" -version = "0.1.0" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "version_check" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "walkdir" -version = "2.2.6" +version = "2.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "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 = "winapi" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -326,10 +354,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "winapi-util" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -338,46 +366,49 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a" -"checksum backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0" -"checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5" -"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" -"checksum bytecount 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f861d9ce359f56dbcb6e0c2a1cb84e52ad732cadb57b806adeb3c7668caccbd8" -"checksum cargo_metadata 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1efca0b863ca03ed4c109fb1c55e0bc4bbeb221d3e103d86251046b06a526bd0" -"checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16" -"checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4" -"checksum error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff511d5dc435d703f4971bc399647c9bc38e20cb41452e3b9feb4765419ed3f3" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" +"checksum autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875" +"checksum backtrace 0.3.38 (registry+https://github.com/rust-lang/crates.io-index)" = "690a62be8920ccf773ee00ef0968649b0e724cda8bd5b12286302b4ae955fdf5" +"checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b" +"checksum bitflags 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8a606a02debe2813760609f57a64a2ffd27d9fdf5b2f133eaca0b248dd92cdd2" +"checksum bytecount 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b92204551573580e078dc80017f36a213eb77a0450e4ddd8cfa0f3f2d1f0178f" +"checksum cargo_metadata 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e5d1b4d380e1bab994591a24c2bdd1b054f64b60bef483a8c598c7c345bc3bbe" +"checksum cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)" = "4fc9a35e1f4290eb9e5fc54ba6cf40671ed2a2514c3eeb2b2a908dda2ea5a1be" +"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +"checksum error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ab49e9dcb602294bc42f9a7dfc9bc6e936fca4418ea300dbfb84fe16de0b7d9" +"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" -"checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" -"checksum libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)" = "76e3a3ef172f1a0b9a9ff0dd1491ae5e6c948b94479a3021819ba7d860c8645d" -"checksum log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c84ec4b527950aa83a329754b01dbe3f58361d1c5efacd1f6d68c494d08a17c6" +"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" +"checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba" +"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" "checksum num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cf4825417e1e1406b3782a8ce92f4d53f26ec055e3622e1881ca8e9f5f9e08db" -"checksum num-complex 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "107b9be86cd2481930688277b675b0114578227f034674726605b8a482d8baf8" -"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" -"checksum num-iter 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "af3fdbbc3291a5464dc57b03860ec37ca6bf915ed6ee385e7c6c052c422b2124" -"checksum num-rational 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e96f040177bb3da242b5b1ecf3f54b5d5af3efbbfb18608977a5d2767b22f10" -"checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1" -"checksum proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)" = "3d7b7eaaa90b4a90a932a9ea6666c95a389e424eff347f0f793979289429feee" -"checksum pulldown-cmark 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d6fdf85cda6cadfae5428a54661d431330b312bc767ddbc57adbedc24da66e32" -"checksum quote 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "63b5829244f52738cfee93b3a165c1911388675be000c888d2fae620dee8fa5b" -"checksum rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd" -"checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" -"checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" -"checksum ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7153dd96dade874ab973e098cb62fcdbb89a03682e46b144fd09550998d4a4a7" -"checksum same-file 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8f20c4be53a8a1ff4c1f1b2bd14570d2f634628709752f0702ecdd2b3f9a5267" +"checksum num-complex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fcb0cf31fb3ff77e6d2a6ebd6800df7fdcd106f2ad89113c9130bcd07f93dffc" +"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.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32" +"checksum proc-macro2 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "90cf5f418035b98e655e9cdb225047638296b862b42411c4e45bb88d700f7fc0" +"checksum pulldown-cmark 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eef52fac62d0ea7b9b4dc7da092aa64ea7ec3d90af6679422d3d7e0e14b6ee15" +"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" +"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" +"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" +"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" +"checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997" +"checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" "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.80 (registry+https://github.com/rust-lang/crates.io-index)" = "15c141fc7027dd265a47c090bf864cf62b42c4d228bbcf4e51a0c9e2b0d3f7ef" -"checksum serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "225de307c6302bec3898c51ca302fc94a7a1697ef0845fcee6448f33c032249c" -"checksum serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)" = "43344e7ce05d0d8280c5940cabb4964bea626aa58b1ec0e8c73fa2a8512a38ce" -"checksum skeptic 0.13.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c4474d6da9593171bcb086890fc344a3a12783cb24e5b141f8a5d0e43561f4b6" -"checksum syn 0.15.18 (registry+https://github.com/rust-lang/crates.io-index)" = "90c39a061e2f412a9f869540471ab679e85e50c6b05604daf28bc3060f75c430" +"checksum serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)" = "9796c9b7ba2ffe7a9ce53c2287dfc48080f4b2b362fcc245a259b3a7201119dd" +"checksum serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)" = "4b133a43a1ecd55d4086bd5b4dc6c1751c68b1bfbeba7a5040442022c7e7c02e" +"checksum serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)" = "2f72eb2a68a7dc3f9a691bfda9305a1c017a6215e5a4545c258500d2099a37c2" +"checksum skeptic 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d6fb8ed853fdc19ce09752d63f3a2e5b5158aeb261520cd75eb618bd60305165" +"checksum syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf" "checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum walkdir 2.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0ffb549f212c31e19f3667c55a7f515b983a84aef10fd0a4d1f9c125425115f3" -"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0" +"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" +"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" +"checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e" +"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.1 (registry+https://github.com/rust-lang/crates.io-index)" = "afc5508759c5bf4285e61feb862b6083c8480aec864fa17a81fdec6f69b461ab" +"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" diff --git a/Cargo.toml b/Cargo.toml index 8ec4aeb..9879428 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,7 +39,7 @@ build = "build.rs" name = "mos6502" [dependencies] -bitflags = "0.9.1" +bitflags = "1" log = "0.4.6" [dependencies.num] diff --git a/src/cpu.rs b/src/cpu.rs index b4a6e55..5e6705e 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -30,9 +30,6 @@ use instruction; use instruction::{DecodedInstr, Instruction, OpInput}; use memory::Memory; use registers::{Registers, StackPointer, Status, StatusArgs}; -use registers::{ - PS_CARRY, PS_DECIMAL_MODE, PS_DISABLE_INTERRUPTS, PS_NEGATIVE, PS_OVERFLOW, PS_ZERO, -}; #[derive(Clone)] pub struct CPU { @@ -137,7 +134,7 @@ impl CPU { let bit6 = 0 != (0x40 & res); self.registers.status.set_with_mask( - PS_ZERO | PS_NEGATIVE | PS_OVERFLOW, + Status::PS_ZERO | Status::PS_NEGATIVE | Status::PS_OVERFLOW, Status::new(StatusArgs { zero: is_zero, negative: bit7, @@ -169,16 +166,16 @@ impl CPU { } (Instruction::CLC, OpInput::UseImplied) => { - self.registers.status.and(!PS_CARRY); + self.registers.status.and(!Status::PS_CARRY); } (Instruction::CLD, OpInput::UseImplied) => { - self.registers.status.and(!PS_DECIMAL_MODE); + self.registers.status.and(!Status::PS_DECIMAL_MODE); } (Instruction::CLI, OpInput::UseImplied) => { - self.registers.status.and(!PS_DISABLE_INTERRUPTS); + self.registers.status.and(!Status::PS_DISABLE_INTERRUPTS); } (Instruction::CLV, OpInput::UseImplied) => { - self.registers.status.and(!PS_OVERFLOW); + self.registers.status.and(!Status::PS_OVERFLOW); } (Instruction::CMP, OpInput::UseImmediate(val)) => { @@ -348,13 +345,13 @@ impl CPU { } (Instruction::SEC, OpInput::UseImplied) => { - self.registers.status.or(PS_CARRY); + self.registers.status.or(Status::PS_CARRY); } (Instruction::SED, OpInput::UseImplied) => { - self.registers.status.or(PS_DECIMAL_MODE); + self.registers.status.or(Status::PS_DECIMAL_MODE); } (Instruction::SEI, OpInput::UseImplied) => { - self.registers.status.or(PS_DISABLE_INTERRUPTS); + self.registers.status.or(Status::PS_DISABLE_INTERRUPTS); } (Instruction::STA, OpInput::UseAddress(addr)) => { @@ -419,7 +416,7 @@ impl CPU { let is_negative = value < 0; status.set_with_mask( - PS_ZERO | PS_NEGATIVE, + Status::PS_ZERO | Status::PS_NEGATIVE, Status::new(StatusArgs { zero: is_zero, negative: is_negative, @@ -434,7 +431,7 @@ impl CPU { let shifted = (*p_val & !(1 << 7)) << 1; *p_val = shifted; status.set_with_mask( - PS_CARRY, + Status::PS_CARRY, Status::new(StatusArgs { carry: is_bit_7_set, ..StatusArgs::none() @@ -448,7 +445,7 @@ impl CPU { let is_bit_0_set = (*p_val & mask) == mask; *p_val >>= 1; status.set_with_mask( - PS_CARRY, + Status::PS_CARRY, Status::new(StatusArgs { carry: is_bit_0_set, ..StatusArgs::none() @@ -458,13 +455,13 @@ impl CPU { } fn rotate_left_with_flags(p_val: &mut u8, status: &mut Status) { - let is_carry_set = status.contains(PS_CARRY); + let is_carry_set = status.contains(Status::PS_CARRY); let mask = 1 << 7; let is_bit_7_set = (*p_val & mask) == mask; let shifted = (*p_val & !(1 << 7)) << 1; *p_val = shifted + if is_carry_set { 1 } else { 0 }; status.set_with_mask( - PS_CARRY, + Status::PS_CARRY, Status::new(StatusArgs { carry: is_bit_7_set, ..StatusArgs::none() @@ -474,13 +471,13 @@ impl CPU { } fn rotate_right_with_flags(p_val: &mut u8, status: &mut Status) { - let is_carry_set = status.contains(PS_CARRY); + let is_carry_set = status.contains(Status::PS_CARRY); let mask = 1; let is_bit_0_set = (*p_val & mask) == mask; let shifted = *p_val >> 1; *p_val = shifted + if is_carry_set { 1 << 7 } else { 0 }; status.set_with_mask( - PS_CARRY, + Status::PS_CARRY, Status::new(StatusArgs { carry: is_bit_0_set, ..StatusArgs::none() @@ -519,12 +516,12 @@ impl CPU { } fn add_with_carry(&mut self, value: i8) { - if self.registers.status.contains(PS_DECIMAL_MODE) { + if self.registers.status.contains(Status::PS_DECIMAL_MODE) { // TODO akeeton: Implement binary-coded decimal. debug!("binary-coded decimal not implemented for add_with_carry"); } else { let a_before: i8 = self.registers.accumulator; - let c_before: i8 = if self.registers.status.contains(PS_CARRY) { + let c_before: i8 = if self.registers.status.contains(Status::PS_CARRY) { 1 } else { 0 @@ -541,7 +538,7 @@ impl CPU { let did_overflow = (a_before < 0 && value < 0 && a_after >= 0) || (a_before > 0 && value > 0 && a_after <= 0); - let mask = PS_CARRY | PS_OVERFLOW; + let mask = Status::PS_CARRY | Status::PS_OVERFLOW; self.registers.status.set_with_mask( mask, @@ -565,7 +562,7 @@ impl CPU { // TODO: Implement binary-coded decimal fn subtract_with_carry(&mut self, value: i8) { - if self.registers.status.contains(PS_DECIMAL_MODE) { + if self.registers.status.contains(Status::PS_DECIMAL_MODE) { debug!( "binary-coded decimal not implemented for \ subtract_with_carry" @@ -574,7 +571,7 @@ impl CPU { // A - M - (1 - C) // nc -- 'not carry' - let nc: i8 = if self.registers.status.contains(PS_CARRY) { + let nc: i8 = if self.registers.status.contains(Status::PS_CARRY) { 0 } else { 1 @@ -600,7 +597,7 @@ impl CPU { let did_overflow = over || under; - let mask = PS_CARRY | PS_OVERFLOW; + let mask = Status::PS_CARRY | Status::PS_OVERFLOW; self.registers.status.set_with_mask( mask, @@ -624,7 +621,7 @@ impl CPU { let is_zero = value_new == 0; self.registers.status.set_with_mask( - PS_NEGATIVE | PS_ZERO, + Status::PS_NEGATIVE | Status::PS_ZERO, Status::new(StatusArgs { negative: is_negative, zero: is_zero, @@ -643,43 +640,43 @@ impl CPU { } fn branch_if_carry_clear(&mut self, addr: Address) { - if !self.registers.status.contains(PS_CARRY) { + if !self.registers.status.contains(Status::PS_CARRY) { self.registers.program_counter = addr; } } fn branch_if_carry_set(&mut self, addr: Address) { - if self.registers.status.contains(PS_CARRY) { + if self.registers.status.contains(Status::PS_CARRY) { self.registers.program_counter = addr; } } fn branch_if_equal(&mut self, addr: Address) { - if self.registers.status.contains(PS_ZERO) { + if self.registers.status.contains(Status::PS_ZERO) { self.registers.program_counter = addr; } } fn branch_if_minus(&mut self, addr: Address) { - if self.registers.status.contains(PS_NEGATIVE) { + if self.registers.status.contains(Status::PS_NEGATIVE) { self.registers.program_counter = addr; } } fn branch_if_positive(&mut self, addr: Address) { - if !self.registers.status.contains(PS_NEGATIVE) { + if !self.registers.status.contains(Status::PS_NEGATIVE) { self.registers.program_counter = addr; } } fn branch_if_overflow_clear(&mut self, addr: Address) { - if !self.registers.status.contains(PS_OVERFLOW) { + if !self.registers.status.contains(Status::PS_OVERFLOW) { self.registers.program_counter = addr; } } fn branch_if_overflow_set(&mut self, addr: Address) { - if self.registers.status.contains(PS_OVERFLOW) { + if self.registers.status.contains(Status::PS_OVERFLOW) { self.registers.program_counter = addr; } } @@ -693,22 +690,22 @@ impl CPU { // The N flag contains most significant bit of the subtraction result. fn compare(&mut self, r: i8, val: u8) { if r as u8 >= val as u8 { - self.registers.status.insert(PS_CARRY); + self.registers.status.insert(Status::PS_CARRY); } else { - self.registers.status.remove(PS_CARRY); + self.registers.status.remove(Status::PS_CARRY); } if r as i8 == val as i8 { - self.registers.status.insert(PS_ZERO); + self.registers.status.insert(Status::PS_ZERO); } else { - self.registers.status.remove(PS_ZERO); + self.registers.status.remove(Status::PS_ZERO); } let diff: i8 = r.wrapping_sub(val as i8); if diff < 0 { - self.registers.status.insert(PS_NEGATIVE); + self.registers.status.insert(Status::PS_NEGATIVE); } else { - self.registers.status.remove(PS_NEGATIVE); + self.registers.status.remove(Status::PS_NEGATIVE); } } @@ -775,71 +772,71 @@ mod tests { cpu.add_with_carry(1); assert_eq!(cpu.registers.accumulator, 1); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); cpu.add_with_carry(-1); assert_eq!(cpu.registers.accumulator, 0); - assert_eq!(cpu.registers.status.contains(PS_CARRY), true); - assert_eq!(cpu.registers.status.contains(PS_ZERO), true); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), true); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), true); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); cpu.add_with_carry(1); assert_eq!(cpu.registers.accumulator, 2); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); let mut cpu = CPU::new(); cpu.add_with_carry(127); assert_eq!(cpu.registers.accumulator, 127); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); cpu.add_with_carry(-127); assert_eq!(cpu.registers.accumulator, 0); - assert_eq!(cpu.registers.status.contains(PS_CARRY), true); - assert_eq!(cpu.registers.status.contains(PS_ZERO), true); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), true); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), true); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); - cpu.registers.status.remove(PS_CARRY); + cpu.registers.status.remove(Status::PS_CARRY); cpu.add_with_carry(-128); assert_eq!(cpu.registers.accumulator, -128); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), true); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), true); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); cpu.add_with_carry(127); assert_eq!(cpu.registers.accumulator, -1); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), true); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), true); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); let mut cpu = CPU::new(); cpu.add_with_carry(127); assert_eq!(cpu.registers.accumulator, 127); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); cpu.add_with_carry(1); assert_eq!(cpu.registers.accumulator, -128); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), true); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), true); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), true); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), true); } #[test] @@ -849,26 +846,26 @@ mod tests { cpu.registers.accumulator = 0; cpu.and(-1); assert_eq!(cpu.registers.accumulator, 0); - assert_eq!(cpu.registers.status.contains(PS_ZERO), true); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), true); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); cpu.registers.accumulator = -1; cpu.and(0); assert_eq!(cpu.registers.accumulator, 0); - assert_eq!(cpu.registers.status.contains(PS_ZERO), true); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), true); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); cpu.registers.accumulator = -1; cpu.and(0x0f); assert_eq!(cpu.registers.accumulator, 0x0f); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); cpu.registers.accumulator = -1; cpu.and(-128); assert_eq!(cpu.registers.accumulator, -128); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), true); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), true); } #[test] @@ -880,55 +877,55 @@ mod tests { cpu.subtract_with_carry(1); assert_eq!(cpu.registers.accumulator, -1); - assert_eq!(cpu.registers.status.contains(PS_CARRY), true); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), true); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), true); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), true); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); cpu.execute_instruction((Instruction::SEC, OpInput::UseImplied)); cpu.registers.accumulator = -128; cpu.subtract_with_carry(1); assert_eq!(cpu.registers.accumulator, 127); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), true); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), true); cpu.execute_instruction((Instruction::SEC, OpInput::UseImplied)); cpu.registers.accumulator = 127; cpu.subtract_with_carry(-1); assert_eq!(cpu.registers.accumulator, -128); - assert_eq!(cpu.registers.status.contains(PS_CARRY), true); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), true); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), true); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), true); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), true); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), true); cpu.execute_instruction((Instruction::CLC, OpInput::UseImplied)); cpu.registers.accumulator = -64; cpu.subtract_with_carry(64); assert_eq!(cpu.registers.accumulator, 127); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), true); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), true); cpu.execute_instruction((Instruction::SEC, OpInput::UseImplied)); cpu.registers.accumulator = 0; cpu.subtract_with_carry(-128); assert_eq!(cpu.registers.accumulator, -128); - assert_eq!(cpu.registers.status.contains(PS_CARRY), true); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), true); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), true); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), true); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), true); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), true); cpu.execute_instruction((Instruction::CLC, OpInput::UseImplied)); cpu.registers.accumulator = 0; cpu.subtract_with_carry(127); assert_eq!(cpu.registers.accumulator, -128); - assert_eq!(cpu.registers.status.contains(PS_CARRY), true); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), true); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), true); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), true); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); } #[test] @@ -940,25 +937,25 @@ mod tests { cpu.decrement_memory(addr); assert_eq!(cpu.memory.get_byte(addr), 4); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); cpu.decrement_memory(addr); assert_eq!(cpu.memory.get_byte(addr), 3); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); cpu.decrement_memory(addr); cpu.decrement_memory(addr); cpu.decrement_memory(addr); assert_eq!(cpu.memory.get_byte(addr), 0); - assert_eq!(cpu.registers.status.contains(PS_ZERO), true); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), true); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); cpu.decrement_memory(addr); assert_eq!(cpu.memory.get_byte(addr) as i8, -1); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), true); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), true); } #[test] @@ -969,34 +966,34 @@ mod tests { cpu.execute_instruction((Instruction::LDA, OpInput::UseImmediate(0))); cpu.execute_instruction((Instruction::LSR, OpInput::UseImplied)); assert_eq!(cpu.registers.accumulator, 0); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), true); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), true); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); cpu.execute_instruction((Instruction::LDA, OpInput::UseImmediate(1))); cpu.execute_instruction((Instruction::LSR, OpInput::UseImplied)); assert_eq!(cpu.registers.accumulator, 0); - assert_eq!(cpu.registers.status.contains(PS_CARRY), true); - assert_eq!(cpu.registers.status.contains(PS_ZERO), true); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), true); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), true); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); cpu.execute_instruction((Instruction::LDA, OpInput::UseImmediate(255))); cpu.execute_instruction((Instruction::LSR, OpInput::UseImplied)); assert_eq!(cpu.registers.accumulator, 0x7F); - assert_eq!(cpu.registers.status.contains(PS_CARRY), true); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), true); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); cpu.execute_instruction((Instruction::LDA, OpInput::UseImmediate(254))); cpu.execute_instruction((Instruction::LSR, OpInput::UseImplied)); assert_eq!(cpu.registers.accumulator, 0x7F); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); } #[test] @@ -1005,25 +1002,25 @@ mod tests { cpu.dec_x(); assert_eq!(cpu.registers.index_x, -1); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), true); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), true); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); cpu.dec_x(); assert_eq!(cpu.registers.index_x, -2); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), true); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), true); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); cpu.load_x_register(5); cpu.dec_x(); assert_eq!(cpu.registers.index_x, 4); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); cpu.dec_x(); cpu.dec_x(); @@ -1031,17 +1028,17 @@ mod tests { cpu.dec_x(); assert_eq!(cpu.registers.index_x, 0); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), true); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), false); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), true); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); cpu.dec_x(); assert_eq!(cpu.registers.index_x, -1); - assert_eq!(cpu.registers.status.contains(PS_CARRY), false); - assert_eq!(cpu.registers.status.contains(PS_ZERO), false); - assert_eq!(cpu.registers.status.contains(PS_NEGATIVE), true); - assert_eq!(cpu.registers.status.contains(PS_OVERFLOW), false); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), true); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); } #[test] @@ -1086,7 +1083,7 @@ mod tests { cpu.branch_if_equal(Address(0xABCD)); assert_eq!(cpu.registers.program_counter, Address(0)); - cpu.registers.status.or(PS_ZERO); + cpu.registers.status.or(Status::PS_ZERO); cpu.branch_if_equal(Address(0xABCD)); assert_eq!(cpu.registers.program_counter, Address(0xABCD)); } @@ -1105,7 +1102,7 @@ mod tests { { let mut cpu = CPU::new(); - cpu.registers.status.or(PS_NEGATIVE); + cpu.registers.status.or(Status::PS_NEGATIVE); let registers_before = cpu.registers; cpu.branch_if_minus(Address(0xABCD)); @@ -1118,11 +1115,11 @@ mod tests { fn branch_if_positive_test() { let mut cpu = CPU::new(); - cpu.registers.status.insert(PS_NEGATIVE); + cpu.registers.status.insert(Status::PS_NEGATIVE); cpu.branch_if_positive(Address(0xABCD)); assert_eq!(cpu.registers.program_counter, Address(0)); - cpu.registers.status.remove(PS_NEGATIVE); + cpu.registers.status.remove(Status::PS_NEGATIVE); cpu.branch_if_positive(Address(0xABCD)); assert_eq!(cpu.registers.program_counter, Address(0xABCD)); } @@ -1131,11 +1128,11 @@ mod tests { fn branch_if_overflow_clear_test() { let mut cpu = CPU::new(); - cpu.registers.status.insert(PS_OVERFLOW); + cpu.registers.status.insert(Status::PS_OVERFLOW); cpu.branch_if_overflow_clear(Address(0xABCD)); assert_eq!(cpu.registers.program_counter, Address(0)); - cpu.registers.status.remove(PS_OVERFLOW); + cpu.registers.status.remove(Status::PS_OVERFLOW); cpu.branch_if_overflow_clear(Address(0xABCD)); assert_eq!(cpu.registers.program_counter, Address(0xABCD)); } @@ -1147,7 +1144,7 @@ mod tests { cpu.branch_if_overflow_set(Address(0xABCD)); assert_eq!(cpu.registers.program_counter, Address(0)); - cpu.registers.status.insert(PS_OVERFLOW); + cpu.registers.status.insert(Status::PS_OVERFLOW); cpu.branch_if_overflow_set(Address(0xABCD)); assert_eq!(cpu.registers.program_counter, Address(0xABCD)); } @@ -1162,44 +1159,44 @@ mod tests { cpu.execute_instruction((load_instruction, OpInput::UseImmediate(127))); compare(&mut cpu, 127); - assert!(cpu.registers.status.contains(PS_ZERO)); - assert!(cpu.registers.status.contains(PS_CARRY)); - assert!(!cpu.registers.status.contains(PS_NEGATIVE)); + assert!(cpu.registers.status.contains(Status::PS_ZERO)); + assert!(cpu.registers.status.contains(Status::PS_CARRY)); + assert!(!cpu.registers.status.contains(Status::PS_NEGATIVE)); cpu.execute_instruction((load_instruction, OpInput::UseImmediate(127))); compare(&mut cpu, 1); - assert!(!cpu.registers.status.contains(PS_ZERO)); - assert!(cpu.registers.status.contains(PS_CARRY)); - assert!(!cpu.registers.status.contains(PS_NEGATIVE)); + assert!(!cpu.registers.status.contains(Status::PS_ZERO)); + assert!(cpu.registers.status.contains(Status::PS_CARRY)); + assert!(!cpu.registers.status.contains(Status::PS_NEGATIVE)); cpu.execute_instruction((load_instruction, OpInput::UseImmediate(1))); compare(&mut cpu, 2); - assert!(!cpu.registers.status.contains(PS_ZERO)); - assert!(!cpu.registers.status.contains(PS_CARRY)); - assert!(cpu.registers.status.contains(PS_NEGATIVE)); + assert!(!cpu.registers.status.contains(Status::PS_ZERO)); + assert!(!cpu.registers.status.contains(Status::PS_CARRY)); + assert!(cpu.registers.status.contains(Status::PS_NEGATIVE)); cpu.execute_instruction((load_instruction, OpInput::UseImmediate(20))); compare(&mut cpu, -50i8 as u8); - assert!(!cpu.registers.status.contains(PS_ZERO)); - assert!(!cpu.registers.status.contains(PS_CARRY)); - assert!(!cpu.registers.status.contains(PS_NEGATIVE)); + assert!(!cpu.registers.status.contains(Status::PS_ZERO)); + assert!(!cpu.registers.status.contains(Status::PS_CARRY)); + assert!(!cpu.registers.status.contains(Status::PS_NEGATIVE)); cpu.execute_instruction((load_instruction, OpInput::UseImmediate(1))); compare(&mut cpu, -1i8 as u8); - assert!(!cpu.registers.status.contains(PS_ZERO)); - assert!(!cpu.registers.status.contains(PS_CARRY)); - assert!(!cpu.registers.status.contains(PS_NEGATIVE)); + assert!(!cpu.registers.status.contains(Status::PS_ZERO)); + assert!(!cpu.registers.status.contains(Status::PS_CARRY)); + assert!(!cpu.registers.status.contains(Status::PS_NEGATIVE)); cpu.execute_instruction((load_instruction, OpInput::UseImmediate(127))); compare(&mut cpu, -128i8 as u8); - assert!(!cpu.registers.status.contains(PS_ZERO)); - assert!(!cpu.registers.status.contains(PS_CARRY)); - assert!(cpu.registers.status.contains(PS_NEGATIVE)); + assert!(!cpu.registers.status.contains(Status::PS_ZERO)); + assert!(!cpu.registers.status.contains(Status::PS_CARRY)); + assert!(cpu.registers.status.contains(Status::PS_NEGATIVE)); } #[test] @@ -1246,15 +1243,15 @@ mod tests { assert_eq!(cpu.registers.accumulator, a_after as i8); if a_after == 0 { - assert!(cpu.registers.status.contains(PS_ZERO)); + assert!(cpu.registers.status.contains(Status::PS_ZERO)); } else { - assert!(!cpu.registers.status.contains(PS_ZERO)); + assert!(!cpu.registers.status.contains(Status::PS_ZERO)); } if (a_after as i8) < 0 { - assert!(cpu.registers.status.contains(PS_NEGATIVE)); + assert!(cpu.registers.status.contains(Status::PS_NEGATIVE)); } else { - assert!(!cpu.registers.status.contains(PS_NEGATIVE)); + assert!(!cpu.registers.status.contains(Status::PS_NEGATIVE)); } } } @@ -1274,15 +1271,15 @@ mod tests { assert_eq!(cpu.registers.accumulator, a_after as i8); if a_after == 0 { - assert!(cpu.registers.status.contains(PS_ZERO)); + assert!(cpu.registers.status.contains(Status::PS_ZERO)); } else { - assert!(!cpu.registers.status.contains(PS_ZERO)); + assert!(!cpu.registers.status.contains(Status::PS_ZERO)); } if (a_after as i8) < 0 { - assert!(cpu.registers.status.contains(PS_NEGATIVE)); + assert!(cpu.registers.status.contains(Status::PS_NEGATIVE)); } else { - assert!(!cpu.registers.status.contains(PS_NEGATIVE)); + assert!(!cpu.registers.status.contains(Status::PS_NEGATIVE)); } } } diff --git a/src/registers.rs b/src/registers.rs index 485e923..5bbd76b 100644 --- a/src/registers.rs +++ b/src/registers.rs @@ -100,28 +100,28 @@ impl Status { let mut out = Status::empty(); if negative { - out |= PS_NEGATIVE + out |= Status::PS_NEGATIVE } if overflow { - out |= PS_OVERFLOW + out |= Status::PS_OVERFLOW } if unused { - out |= PS_UNUSED + out |= Status::PS_UNUSED } if brk { - out |= PS_BRK + out |= Status::PS_BRK } if decimal_mode { - out |= PS_DECIMAL_MODE + out |= Status::PS_DECIMAL_MODE } if disable_interrupts { - out |= PS_DISABLE_INTERRUPTS + out |= Status::PS_DISABLE_INTERRUPTS } if zero { - out |= PS_ZERO + out |= Status::PS_ZERO } if carry { - out |= PS_CARRY + out |= Status::PS_CARRY } out From cb8800689f9a8505e6ea6e5ba9563d8541cf8ada Mon Sep 17 00:00:00 2001 From: Andrey Kutejko Date: Sun, 6 Oct 2019 23:23:38 +0200 Subject: [PATCH 04/36] Make changes suggested by Clippy and few more --- src/address.rs | 12 +++++------- src/memory.rs | 48 +++++++++++++++++++++++++++--------------------- src/registers.rs | 11 ++++------- 3 files changed, 36 insertions(+), 35 deletions(-) diff --git a/src/address.rs b/src/address.rs index b3a00f4..98a1c19 100644 --- a/src/address.rs +++ b/src/address.rs @@ -73,21 +73,19 @@ impl Add for Address { } impl Address { - pub fn to_u16(&self) -> u16 { - match *self { - Address(address_) => address_, - } + pub fn to_u16(self) -> u16 { + self.0 } - pub fn to_usize(&self) -> usize { + pub fn to_usize(self) -> usize { self.to_u16() as usize } - pub fn get_page_number(&self) -> u8 { + pub fn get_page_number(self) -> u8 { (self.to_u16() & 0xff00 >> 8) as u8 } - pub fn get_offset(&self) -> u8 { + pub fn get_offset(self) -> u8 { (self.to_u16() & 0x00ff) as u8 } } diff --git a/src/memory.rs b/src/memory.rs index 21d3402..7c9596f 100644 --- a/src/memory.rs +++ b/src/memory.rs @@ -49,17 +49,11 @@ pub const IRQ_INTERRUPT_VECTOR_HI: Address = Address(0xFFFF); const MEMORY_SIZE: usize = (ADDR_HI_BARE - ADDR_LO_BARE) as usize + 1usize; // FIXME: Should this use indirection for `bytes`? -#[derive(Copy)] +#[derive(Copy, Clone)] pub struct Memory { bytes: [u8; MEMORY_SIZE], } -impl Clone for Memory { - fn clone(&self) -> Self { - *self - } -} - impl Memory { pub fn new() -> Memory { Memory { bytes: [0; MEMORY_SIZE] } @@ -73,11 +67,8 @@ impl Memory { &mut self.bytes[address.to_usize()] } - pub fn get_slice(&self, Address(start): Address, AddressDiff(diff): AddressDiff) -> &[u8] { - let start = start as usize; - let diff = diff as usize; - let end = start + diff; - &self.bytes[start..end] + pub fn get_slice(&self, start: Address, diff: AddressDiff) -> &[u8] { + &self.bytes[start.to_usize()..(start + diff).to_usize()] } // Sets the byte at the given address to the given value and returns the @@ -88,20 +79,35 @@ impl Memory { old_value } - pub fn set_bytes(&mut self, Address(start): Address, values: &[u8]) { - let start = start as usize; + pub fn set_bytes(&mut self, start: Address, values: &[u8]) { + let start = start.to_usize(); // This panics if the range is invalid let end = start + values.len(); - let slice = &mut self.bytes[start..end]; - // JAM: Is this the best way to do this copy? - for (dest, src) in slice.iter_mut().zip(values.iter()) { - *dest = *src; - } + self.bytes[start..end].copy_from_slice(values); } - pub fn is_stack_address(address: &Address) -> bool { - STACK_ADDRESS_LO <= *address && *address <= STACK_ADDRESS_HI + pub fn is_stack_address(address: Address) -> bool { + (STACK_ADDRESS_LO..=STACK_ADDRESS_HI).contains(&address) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_memory_set_bytes() { + let mut memory = Memory::new(); + memory.set_bytes(Address(0x0100), &[1, 2, 3, 4, 5]); + assert_eq!(memory.get_slice(Address(0x00FF), AddressDiff(7)), &[0, 1, 2, 3, 4, 5, 0]); + } + + #[test] + #[should_panic] + fn test_memory_overflow_panic() { + let mut memory = Memory::new(); + memory.set_bytes(Address(0xFFFE), &[1, 2, 3]); } } diff --git a/src/registers.rs b/src/registers.rs index 5bbd76b..e28fe32 100644 --- a/src/registers.rs +++ b/src/registers.rs @@ -144,21 +144,18 @@ impl Status { pub struct StackPointer(pub u8); impl StackPointer { - pub fn to_address(&self) -> Address { - let StackPointer(sp) = *self; - STACK_ADDRESS_LO + AddressDiff(i32::from(sp)) + pub fn to_address(self) -> Address { + STACK_ADDRESS_LO + AddressDiff(i32::from(self.0)) } // JAM: FIXME: Should we prevent overflow here? What would a 6502 do? pub fn decrement(&mut self) { - let StackPointer(val) = *self; - *self = StackPointer(val - 1); + self.0 -= 1; } pub fn increment(&mut self) { - let StackPointer(val) = *self; - *self = StackPointer(val + 1); + self.0 += 1; } } From 8c70df142c7bb5c68e8880033130e973d16b37ef Mon Sep 17 00:00:00 2001 From: GooseDB Date: Sun, 13 Oct 2019 00:07:53 +0300 Subject: [PATCH 05/36] new example --- examples/euclidean_algo.rs | 47 ++++++++++++++++++++++++++++++++ {src/bin => examples}/mos6502.rs | 41 ++-------------------------- 2 files changed, 50 insertions(+), 38 deletions(-) create mode 100644 examples/euclidean_algo.rs rename {src/bin => examples}/mos6502.rs (60%) diff --git a/examples/euclidean_algo.rs b/examples/euclidean_algo.rs new file mode 100644 index 0000000..330a542 --- /dev/null +++ b/examples/euclidean_algo.rs @@ -0,0 +1,47 @@ +extern crate mos6502; +use mos6502::address::Address; +use mos6502::cpu; + +fn main() { + let mut input = String::new(); + std::io::stdin().read_line(&mut input).unwrap(); + let nums = input + .trim() + .split(' ') + .map(|s| s.parse::().unwrap()) + .collect::>(); + let (first, second) = (nums[0], nums[1]); + + let zero_page_data = [first, second]; + let program = [ + // (F)irst | (S)econd + // .algo + 0xa5, 0x00, // Load from F to A + // .algo_ + 0x38, // Set carry flag + 0xe5, 0x01, // Substract S from number in A (from F) + 0xf0, 0x07, // Jump to .end if diff is zero + 0x30, 0x08, // Jump to .swap if diff is negative + 0x85, 0x00, // Load A to F + 0x4c, 0x12, 0x00, // Jump to .algo_ + // .end + 0xa5, 0x00, // Load from S to A + 0xff, + // .swap + 0xa6, 0x00, // load F to X + 0xa4, 0x01, // load S to Y + 0x86, 0x01, // Store X to F + 0x84, 0x00, // Store Y to S + 0x4c, 0x10, 0x00, // Jump to .algo + ]; + + let mut cpu = cpu::CPU::new(); + + cpu.memory.set_bytes(Address(0x00), &zero_page_data); + cpu.memory.set_bytes(Address(0x10), &program); + cpu.registers.program_counter = Address(0x10); + + cpu.run(); + + println!("GCD is {:?}", cpu.registers.accumulator); +} diff --git a/src/bin/mos6502.rs b/examples/mos6502.rs similarity index 60% rename from src/bin/mos6502.rs rename to examples/mos6502.rs index f8c4612..e41531e 100644 --- a/src/bin/mos6502.rs +++ b/examples/mos6502.rs @@ -1,45 +1,11 @@ -// Copyright (C) 2014 The 6502-rs Developers -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// 3. Neither the names of the copyright holders nor the names of any -// contributors may be used to endorse or promote products derived from this -// software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - extern crate mos6502; -#[cfg(not(test))] use mos6502::cpu; - -#[cfg(not(test))] use mos6502::address::Address; -#[cfg(not(test))] fn main() { let mut cpu = cpu::CPU::new(); - // "Load" a program - - let zero_page_data = [ // ZeroPage data start 0x00, @@ -98,7 +64,7 @@ fn main() { 0xFF, // Something invalid -- the end! ]; - let data = [ + let data: [u8; 25] = [ 0x00, 0x09, // ADC Absolute target 0x00, @@ -126,6 +92,7 @@ fn main() { 0x06, // ADC IndirectIndexedY target ]; + // "Load" a program cpu.memory.set_bytes(Address(0x0000), &zero_page_data); cpu.memory.set_bytes(Address(0x4000), &program); cpu.memory.set_bytes(Address(0x8000), &data); @@ -133,6 +100,4 @@ fn main() { cpu.registers.program_counter = Address(0x4000); cpu.run(); - - println!("{:?}", cpu); -} +} \ No newline at end of file From 71ac36b0837b8cbedd8a427120700d8603cb1109 Mon Sep 17 00:00:00 2001 From: GooseDB Date: Sun, 13 Oct 2019 00:14:55 +0300 Subject: [PATCH 06/36] return comment --- examples/mos6502.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/examples/mos6502.rs b/examples/mos6502.rs index e41531e..5c7ddc1 100644 --- a/examples/mos6502.rs +++ b/examples/mos6502.rs @@ -1,3 +1,30 @@ +// Copyright (C) 2014 The 6502-rs Developers +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. Neither the names of the copyright holders nor the names of any +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + extern crate mos6502; use mos6502::cpu; From c837d7c9869005afddbf98f43b478df75c354a11 Mon Sep 17 00:00:00 2001 From: GooseDB Date: Sun, 13 Oct 2019 00:18:07 +0300 Subject: [PATCH 07/36] return comments --- examples/mos6502.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/examples/mos6502.rs b/examples/mos6502.rs index 5c7ddc1..f6d6d99 100644 --- a/examples/mos6502.rs +++ b/examples/mos6502.rs @@ -27,12 +27,19 @@ extern crate mos6502; +#[cfg(not(test))] use mos6502::cpu; + +#[cfg(not(test))] use mos6502::address::Address; +#[cfg(not(test))] fn main() { let mut cpu = cpu::CPU::new(); + // "Load" a program + + let zero_page_data = [ // ZeroPage data start 0x00, @@ -91,7 +98,7 @@ fn main() { 0xFF, // Something invalid -- the end! ]; - let data: [u8; 25] = [ + let data = [ 0x00, 0x09, // ADC Absolute target 0x00, @@ -119,7 +126,6 @@ fn main() { 0x06, // ADC IndirectIndexedY target ]; - // "Load" a program cpu.memory.set_bytes(Address(0x0000), &zero_page_data); cpu.memory.set_bytes(Address(0x4000), &program); cpu.memory.set_bytes(Address(0x8000), &data); @@ -127,4 +133,6 @@ fn main() { cpu.registers.program_counter = Address(0x4000); cpu.run(); + + println!("{:?}", cpu); } \ No newline at end of file From 0e112a8a44db394af6cd45080ea5ff8558477099 Mon Sep 17 00:00:00 2001 From: GooseDB Date: Sun, 13 Oct 2019 00:19:09 +0300 Subject: [PATCH 08/36] return newline --- examples/mos6502.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/mos6502.rs b/examples/mos6502.rs index f6d6d99..f8c4612 100644 --- a/examples/mos6502.rs +++ b/examples/mos6502.rs @@ -135,4 +135,4 @@ fn main() { cpu.run(); println!("{:?}", cpu); -} \ No newline at end of file +} From 7f7b9d87a2afad51918fd37d418e83d3aa230574 Mon Sep 17 00:00:00 2001 From: GooseDB Date: Sun, 13 Oct 2019 00:34:19 +0300 Subject: [PATCH 09/36] update toml --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index 9879428..d4c9ddc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,6 +33,7 @@ license = "BSD-3-Clause" version = "0.1.0" authors = ["The 6502-rs Developers"] build = "build.rs" +exclude = ["examples/**"] [lib] # This will look in src/lib.rs From 6a0163138abfdfe303044e0434ab8a31c811dc71 Mon Sep 17 00:00:00 2001 From: GooseDB Date: Sun, 13 Oct 2019 01:22:57 +0300 Subject: [PATCH 10/36] refactoring --- examples/euclidean_algo.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/euclidean_algo.rs b/examples/euclidean_algo.rs index 330a542..2344ccd 100644 --- a/examples/euclidean_algo.rs +++ b/examples/euclidean_algo.rs @@ -3,16 +3,16 @@ use mos6502::address::Address; use mos6502::cpu; fn main() { + println!("Enter two numbers (< 128) to know their GCD:"); let mut input = String::new(); std::io::stdin().read_line(&mut input).unwrap(); - let nums = input + + let zero_page_data = input .trim() .split(' ') .map(|s| s.parse::().unwrap()) .collect::>(); - let (first, second) = (nums[0], nums[1]); - let zero_page_data = [first, second]; let program = [ // (F)irst | (S)econd // .algo From 0578a3e6634658bf2cf8493175cccde8a145f71d Mon Sep 17 00:00:00 2001 From: Naoaki Iwakiri Date: Tue, 22 Oct 2019 09:17:15 +0900 Subject: [PATCH 11/36] Add github actions --- .github/workflows/continuous_testing.yaml | 21 +++++++++++++++++++++ README.md | 3 ++- 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/continuous_testing.yaml diff --git a/.github/workflows/continuous_testing.yaml b/.github/workflows/continuous_testing.yaml new file mode 100644 index 0000000..0732838 --- /dev/null +++ b/.github/workflows/continuous_testing.yaml @@ -0,0 +1,21 @@ +name: test +on: push + +jobs: + build_and_test: + name: test + strategy: + matrix: + os: [ubuntu-latest, macOS-latest, windows-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@master + - name: Install cargo + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - name: Run test + uses: actions-rs/cargo@v1 + with: + command: test diff --git a/README.md b/README.md index 9caa234..41b17de 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # mos6502 -[![Build Status](https://travis-ci.org/mre/mos6502.svg?branch=master)](https://travis-ci.org/mre/mos6502) +[![Build Status](https://travis-ci.org/mre/mos6502.svg?branch=master)](https://travis-ci.org/mre/mos6502) +![](https://github.com/mre/mos6502/workflows/test/badge.svg) An emulator for the [MOS 6502 CPU](https://en.wikipedia.org/wiki/MOS_Technology_6502) written in Rust. This started off as a fork of [amw-zero/6502-rs](https://github.com/amw-zero/6502-rs), From d4c11e8f7c5d4af9f750f940ea7e11f212da1b15 Mon Sep 17 00:00:00 2001 From: GooseDB Date: Tue, 22 Oct 2019 15:15:26 +0300 Subject: [PATCH 12/36] update readme --- README.md | 124 +++++++++++++++--------------------------------------- 1 file changed, 34 insertions(+), 90 deletions(-) diff --git a/README.md b/README.md index 41b17de..f9c00de 100644 --- a/README.md +++ b/README.md @@ -13,106 +13,50 @@ It builds with the latest stable Rust and supports `#[no_std]` targets. ```rust extern crate mos6502; - -use mos6502::cpu; use mos6502::address::Address; +use mos6502::cpu; fn main() { - let mut cpu = cpu::CPU::new(); + println!("Enter two numbers (< 128) to know their GCD:"); + let mut input = String::new(); + std::io::stdin().read_line(&mut input).unwrap(); - let zero_page_data = [ - // ZeroPage data start - 0x00, - 0x02, // ADC ZeroPage target - 0x00, - 0x04, // ADC ZeroPageX target - 0x00, - 0x00, - 0x00, - 0x00, - 0x10, // ADC IndexedIndirectX address - 0x80, // ADC IndexedIndirectX address - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x08, // ADC IndirectIndexedY address - 0x80, // ADC IndirectIndexedY address - ]; + let zero_page_data = input + .trim() + .split(' ') + .map(|s| s.parse::().unwrap()) + .collect::>(); let program = [ - // Code start - 0xA9, // LDA Immediate - 0x01, // Immediate operand - 0x69, // ADC Immediate - 0x07, // Immediate operand - 0x65, // ADC ZeroPage - 0x01, // ZeroPage operand - 0xA2, // LDX Immediate - 0x01, // Immediate operand - 0x75, // ADC ZeroPageX - 0x02, // ZeroPageX operand - 0x6D, // ADC Absolute - 0x01, // Absolute operand - 0x80, // Absolute operand - 0xA2, // LDX immediate - 0x08, // Immediate operand - 0x7D, // ADC AbsoluteX - 0x00, // AbsoluteX operand - 0x80, // AbsoluteX operand - 0xA0, // LDY immediate - 0x04, // Immediate operand - 0x79, // ADC AbsoluteY - 0x00, // AbsoluteY operand - 0x80, // AbsoluteY operand - 0xA2, // LDX immediate - 0x05, // Immediate operand - 0x61, // ADC IndexedIndirectX - 0x03, // IndexedIndirectX operand - 0xA0, // LDY immediate - 0x10, // Immediate operand - 0x71, // ADC IndirectIndexedY - 0x0F, // IndirectIndexedY operand - 0xEA, // NOP :) - 0xFF, // Something invalid -- the end! + // (F)irst | (S)econd + // .algo + 0xa5, 0x00, // Load from F to A + // .algo_ + 0x38, // Set carry flag + 0xe5, 0x01, // Substract S from number in A (from F) + 0xf0, 0x07, // Jump to .end if diff is zero + 0x30, 0x08, // Jump to .swap if diff is negative + 0x85, 0x00, // Load A to F + 0x4c, 0x12, 0x00, // Jump to .algo_ + // .end + 0xa5, 0x00, // Load from S to A + 0xff, + // .swap + 0xa6, 0x00, // load F to X + 0xa4, 0x01, // load S to Y + 0x86, 0x01, // Store X to F + 0x84, 0x00, // Store Y to S + 0x4c, 0x10, 0x00, // Jump to .algo ]; - let data: [u8; 25] = [ - 0x00, - 0x09, // ADC Absolute target - 0x00, - 0x00, - 0x40, // ADC AbsoluteY target - 0x00, - 0x00, - 0x00, - 0x11, // ADC AbsoluteX target - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x12, // ADC IndexedIndirectX target - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x06, // ADC IndirectIndexedY target - ]; + let mut cpu = cpu::CPU::new(); - // "Load" a program - cpu.memory.set_bytes(Address(0x0000), &zero_page_data); - cpu.memory.set_bytes(Address(0x4000), &program); - cpu.memory.set_bytes(Address(0x8000), &data); - - cpu.registers.program_counter = Address(0x4000); + cpu.memory.set_bytes(Address(0x00), &zero_page_data); + cpu.memory.set_bytes(Address(0x10), &program); + cpu.registers.program_counter = Address(0x10); cpu.run(); + + println!("GCD is {:?}", cpu.registers.accumulator); } ``` From e0d5004aa63948b08ed8e8ec7b880fe2dc76297d Mon Sep 17 00:00:00 2001 From: GooseDB Date: Tue, 22 Oct 2019 18:53:13 +0300 Subject: [PATCH 13/36] remove user input from readme example --- README.md | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index f9c00de..305e02f 100644 --- a/README.md +++ b/README.md @@ -17,15 +17,8 @@ use mos6502::address::Address; use mos6502::cpu; fn main() { - println!("Enter two numbers (< 128) to know their GCD:"); - let mut input = String::new(); - std::io::stdin().read_line(&mut input).unwrap(); - let zero_page_data = input - .trim() - .split(' ') - .map(|s| s.parse::().unwrap()) - .collect::>(); + let zero_page_data = [56, 49]; let program = [ // (F)irst | (S)econd @@ -57,6 +50,7 @@ fn main() { cpu.run(); - println!("GCD is {:?}", cpu.registers.accumulator); + assert_eq!(7, cpu.registers.accumulator); + } ``` From 462ba39c760ead76266fd630fed067ba136ad08f Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 23 Oct 2019 09:47:40 +0000 Subject: [PATCH 14/36] Bump bitflags from 1.2.0 to 1.2.1 Bumps [bitflags](https://github.com/bitflags/bitflags) from 1.2.0 to 1.2.1. - [Release notes](https://github.com/bitflags/bitflags/releases) - [Changelog](https://github.com/bitflags/bitflags/blob/master/CHANGELOG.md) - [Commits](https://github.com/bitflags/bitflags/compare/1.2.0...1.2.1) Signed-off-by: dependabot-preview[bot] --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 877112d..eaec95a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -27,7 +27,7 @@ dependencies = [ [[package]] name = "bitflags" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -98,7 +98,7 @@ dependencies = [ name = "mos6502" version = "0.1.0" dependencies = [ - "bitflags 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "skeptic 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -175,7 +175,7 @@ name = "pulldown-cmark" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -369,7 +369,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875" "checksum backtrace 0.3.38 (registry+https://github.com/rust-lang/crates.io-index)" = "690a62be8920ccf773ee00ef0968649b0e724cda8bd5b12286302b4ae955fdf5" "checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b" -"checksum bitflags 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8a606a02debe2813760609f57a64a2ffd27d9fdf5b2f133eaca0b248dd92cdd2" +"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" "checksum bytecount 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b92204551573580e078dc80017f36a213eb77a0450e4ddd8cfa0f3f2d1f0178f" "checksum cargo_metadata 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e5d1b4d380e1bab994591a24c2bdd1b054f64b60bef483a8c598c7c345bc3bbe" "checksum cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)" = "4fc9a35e1f4290eb9e5fc54ba6cf40671ed2a2514c3eeb2b2a908dda2ea5a1be" From 08198798375a28237146f76c1861071218ed89a4 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2020 04:54:14 +0000 Subject: [PATCH 15/36] Bump num from 0.2.0 to 0.2.1 Bumps [num](https://github.com/rust-num/num) from 0.2.0 to 0.2.1. - [Release notes](https://github.com/rust-num/num/releases) - [Changelog](https://github.com/rust-num/num/blob/master/RELEASES.md) - [Commits](https://github.com/rust-num/num/compare/num-0.2.0...num-0.2.1) Signed-off-by: dependabot-preview[bot] --- Cargo.lock | 62 +++++++++++++++++++++++++++--------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index eaec95a..af8dbf2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,7 +2,7 @@ # It is not intended for manual editing. [[package]] name = "autocfg" -version = "0.1.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -100,66 +100,66 @@ version = "0.1.0" dependencies = [ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "skeptic 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-complex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.41 (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.8 (registry+https://github.com/rust-lang/crates.io-index)", + "num-complex 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-complex" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-integer" -version = "0.1.41" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-iter" -version = "0.1.39" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "autocfg 0.1.6 (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.8 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-rational" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "autocfg 0.1.6 (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.8 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-traits" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -366,7 +366,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] -"checksum autocfg 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b671c8fb71b457dd4ae18c4ba1e59aa81793daacc361d82fcd410cef0d491875" +"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" "checksum backtrace 0.3.38 (registry+https://github.com/rust-lang/crates.io-index)" = "690a62be8920ccf773ee00ef0968649b0e724cda8bd5b12286302b4ae955fdf5" "checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b" "checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" @@ -380,12 +380,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" "checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba" "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" -"checksum num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cf4825417e1e1406b3782a8ce92f4d53f26ec055e3622e1881ca8e9f5f9e08db" -"checksum num-complex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fcb0cf31fb3ff77e6d2a6ebd6800df7fdcd106f2ad89113c9130bcd07f93dffc" -"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.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32" +"checksum num 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" +"checksum num-complex 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" +"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" +"checksum num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00" +"checksum num-rational 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "da4dc79f9e6c81bef96148c8f6b8e72ad4541caa4a24373e900a36da07de03a3" +"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" "checksum proc-macro2 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "90cf5f418035b98e655e9cdb225047638296b862b42411c4e45bb88d700f7fc0" "checksum pulldown-cmark 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eef52fac62d0ea7b9b4dc7da092aa64ea7ec3d90af6679422d3d7e0e14b6ee15" "checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" From 400ad34f49a7b5d73940d86ecfefb076b77a8ea5 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 13 Jun 2020 23:13:50 +0000 Subject: [PATCH 16/36] Bump num from 0.2.1 to 0.3.0 Bumps [num](https://github.com/rust-num/num) from 0.2.1 to 0.3.0. - [Release notes](https://github.com/rust-num/num/releases) - [Changelog](https://github.com/rust-num/num/blob/master/RELEASES.md) - [Commits](https://github.com/rust-num/num/compare/num-0.2.1...num-0.3.0) Signed-off-by: dependabot-preview[bot] --- Cargo.lock | 49 ++++++++++++++++++++++++------------------------- Cargo.toml | 2 +- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index af8dbf2..a2f2d93 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -100,63 +100,62 @@ version = "0.1.0" dependencies = [ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "skeptic 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "num-complex 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", - "num-rational 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "num-complex 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-complex" -version = "0.2.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-integer" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-iter" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-rational" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "num-traits" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -380,12 +379,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" "checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba" "checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" -"checksum num 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" -"checksum num-complex 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" -"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" -"checksum num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00" -"checksum num-rational 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "da4dc79f9e6c81bef96148c8f6b8e72ad4541caa4a24373e900a36da07de03a3" -"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" +"checksum num 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ab3e176191bc4faad357e3122c4747aa098ac880e88b168f106386128736cf4a" +"checksum num-complex 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b05ad05bd8977050b171b3f6b48175fea6e0565b7981059b486075e1026a9fb5" +"checksum num-integer 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" +"checksum num-iter 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e6b7c748f995c4c29c5f5ae0248536e04a5739927c74ec0fa564805094b9f" +"checksum num-rational 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b4d7360f362cfb50dde8143501e6940b22f644be75a4cc90b2d81968908138" +"checksum num-traits 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" "checksum proc-macro2 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "90cf5f418035b98e655e9cdb225047638296b862b42411c4e45bb88d700f7fc0" "checksum pulldown-cmark 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eef52fac62d0ea7b9b4dc7da092aa64ea7ec3d90af6679422d3d7e0e14b6ee15" "checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" diff --git a/Cargo.toml b/Cargo.toml index d4c9ddc..be732e2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,7 +44,7 @@ bitflags = "1" log = "0.4.6" [dependencies.num] -version = "0.2" +version = "0.3" # no_std support default-features = false From 6d374c804c6e62da6640fe7462aabd6b7de78e21 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 23 Jun 2020 02:16:15 +0200 Subject: [PATCH 17/36] Create FUNDING.yml --- .github/FUNDING.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..750ef1a --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: mre +patreon: hellorust From 525bd3e7c5b04644ed49199d1243c772589b432d Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 16 Jul 2020 01:24:50 +0000 Subject: [PATCH 18/36] Bump log from 0.4.8 to 0.4.11 Bumps [log](https://github.com/rust-lang/log) from 0.4.8 to 0.4.11. - [Release notes](https://github.com/rust-lang/log/releases) - [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang/log/compare/0.4.8...0.4.11) Signed-off-by: dependabot-preview[bot] --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a2f2d93..0ecf4bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,7 +88,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "log" -version = "0.4.8" +version = "0.4.11" 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)", @@ -99,7 +99,7 @@ name = "mos6502" version = "0.1.0" dependencies = [ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "num 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "skeptic 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -378,7 +378,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" "checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" "checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba" -"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" +"checksum log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" "checksum num 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ab3e176191bc4faad357e3122c4747aa098ac880e88b168f106386128736cf4a" "checksum num-complex 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b05ad05bd8977050b171b3f6b48175fea6e0565b7981059b486075e1026a9fb5" "checksum num-integer 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" diff --git a/Cargo.toml b/Cargo.toml index be732e2..39b9a20 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,7 +41,7 @@ name = "mos6502" [dependencies] bitflags = "1" -log = "0.4.6" +log = "0.4.11" [dependencies.num] version = "0.3" From cb2b8aef88d1c8704b617d5e8ced92f29c8c3bf2 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 29 Oct 2020 14:34:49 +0000 Subject: [PATCH 19/36] Bump skeptic from 0.13.4 to 0.13.5 Bumps [skeptic](https://github.com/budziq/rust-skeptic) from 0.13.4 to 0.13.5. - [Release notes](https://github.com/budziq/rust-skeptic/releases) - [Changelog](https://github.com/budziq/rust-skeptic/blob/master/CHANGELOG.md) - [Commits](https://github.com/budziq/rust-skeptic/compare/0.13.4...0.13.5) Signed-off-by: dependabot-preview[bot] --- Cargo.lock | 322 ++++++++++++++++++++++++++--------------------------- 1 file changed, 157 insertions(+), 165 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0ecf4bd..a891a6e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,410 +4,402 @@ name = "autocfg" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "backtrace" -version = "0.3.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace-sys 0.1.31 (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.62 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "backtrace-sys" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" [[package]] name = "bitflags" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] name = "bytecount" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0017894339f586ccb943b01b9555de56770c11cda818e7e3d8bd93f4ed7f46e" [[package]] name = "cargo_metadata" -version = "0.6.4" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8de60b887edf6d74370fc8eb177040da4847d971d6234c7b13a6da324ef0caf" dependencies = [ - "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", + "semver", + "serde", + "serde_derive", + "serde_json", ] -[[package]] -name = "cc" -version = "1.0.45" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "error-chain" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ab49e9dcb602294bc42f9a7dfc9bc6e936fca4418ea300dbfb84fe16de0b7d9" dependencies = [ - "backtrace 0.3.38 (registry+https://github.com/rust-lang/crates.io-index)", - "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check", ] [[package]] -name = "fuchsia-cprng" -version = "0.1.1" +name = "getrandom" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] [[package]] name = "glob" -version = "0.2.11" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "itoa" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" [[package]] name = "libc" -version = "0.2.62" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" [[package]] name = "log" version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", ] [[package]] name = "mos6502" version = "0.1.0" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "num 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "skeptic 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", + "log", + "num", + "skeptic", ] [[package]] name = "num" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3e176191bc4faad357e3122c4747aa098ac880e88b168f106386128736cf4a" dependencies = [ - "num-complex 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", - "num-iter 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", - "num-rational 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", ] [[package]] name = "num-complex" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05ad05bd8977050b171b3f6b48175fea6e0565b7981059b486075e1026a9fb5" dependencies = [ - "num-traits 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits", ] [[package]] name = "num-integer" version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg", + "num-traits", ] [[package]] name = "num-iter" version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6e6b7c748f995c4c29c5f5ae0248536e04a5739927c74ec0fa564805094b9f" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg", + "num-integer", + "num-traits", ] [[package]] name = "num-rational" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5b4d7360f362cfb50dde8143501e6940b22f644be75a4cc90b2d81968908138" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "num-integer 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg", + "num-integer", + "num-traits", ] [[package]] name = "num-traits" version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" dependencies = [ - "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg", ] [[package]] -name = "proc-macro2" -version = "1.0.5" +name = "ppv-lite86" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c36fa947111f5c62a733b652544dd0016a43ce89619538a8ef92724a6f501a20" + +[[package]] +name = "proc-macro2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" dependencies = [ - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid", ] [[package]] name = "pulldown-cmark" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eef52fac62d0ea7b9b4dc7da092aa64ea7ec3d90af6679422d3d7e0e14b6ee15" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags", ] [[package]] name = "quote" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" dependencies = [ - "proc-macro2 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", ] [[package]] name = "rand" -version = "0.4.6" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)", - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom", + "libc", + "rand_chacha", + "rand_core", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core", ] [[package]] name = "rand_core" -version = "0.3.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "getrandom", ] [[package]] -name = "rand_core" -version = "0.4.2" +name = "rand_hc" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core", +] [[package]] -name = "rdrand" -version = "0.4.0" +name = "redox_syscall" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" [[package]] name = "remove_dir_all" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi", ] -[[package]] -name = "rustc-demangle" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "ryu" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997" [[package]] name = "same-file" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" dependencies = [ - "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util", ] [[package]] name = "semver" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", + "semver-parser", + "serde", ] [[package]] name = "semver-parser" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9796c9b7ba2ffe7a9ce53c2287dfc48080f4b2b362fcc245a259b3a7201119dd" [[package]] name = "serde_derive" -version = "1.0.101" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e" dependencies = [ - "proc-macro2 1.0.5 (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.5 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "serde_json" version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f72eb2a68a7dc3f9a691bfda9305a1c017a6215e5a4545c258500d2099a37c2" dependencies = [ - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa", + "ryu", + "serde", ] [[package]] name = "skeptic" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6deb8efaf3ad8fd784139db8bbd51806bfbcee87c7be7578e9c930981fb808" dependencies = [ - "bytecount 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "cargo_metadata 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", - "glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "pulldown-cmark 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", - "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", - "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)", + "bytecount", + "cargo_metadata", + "error-chain", + "glob", + "pulldown-cmark", + "tempfile", + "walkdir", ] [[package]] name = "syn" -version = "1.0.5" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac" dependencies = [ - "proc-macro2 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "unicode-xid", ] [[package]] -name = "tempdir" -version = "0.3.7" +name = "tempfile" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" dependencies = [ - "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if", + "libc", + "rand", + "redox_syscall", + "remove_dir_all", + "winapi", ] [[package]] name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" [[package]] name = "version_check" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" [[package]] name = "walkdir" version = "2.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e" 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)", + "same-file", + "winapi", + "winapi-util", ] +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "winapi" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9" dependencies = [ - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi", ] [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" - -[metadata] -"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" -"checksum backtrace 0.3.38 (registry+https://github.com/rust-lang/crates.io-index)" = "690a62be8920ccf773ee00ef0968649b0e724cda8bd5b12286302b4ae955fdf5" -"checksum backtrace-sys 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "82a830b4ef2d1124a711c71d263c5abdc710ef8e907bd508c88be475cebc422b" -"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -"checksum bytecount 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b92204551573580e078dc80017f36a213eb77a0450e4ddd8cfa0f3f2d1f0178f" -"checksum cargo_metadata 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e5d1b4d380e1bab994591a24c2bdd1b054f64b60bef483a8c598c7c345bc3bbe" -"checksum cc 1.0.45 (registry+https://github.com/rust-lang/crates.io-index)" = "4fc9a35e1f4290eb9e5fc54ba6cf40671ed2a2514c3eeb2b2a908dda2ea5a1be" -"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" -"checksum error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ab49e9dcb602294bc42f9a7dfc9bc6e936fca4418ea300dbfb84fe16de0b7d9" -"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" -"checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" -"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" -"checksum libc 0.2.62 (registry+https://github.com/rust-lang/crates.io-index)" = "34fcd2c08d2f832f376f4173a231990fa5aef4e99fb569867318a227ef4c06ba" -"checksum log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)" = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" -"checksum num 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ab3e176191bc4faad357e3122c4747aa098ac880e88b168f106386128736cf4a" -"checksum num-complex 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b05ad05bd8977050b171b3f6b48175fea6e0565b7981059b486075e1026a9fb5" -"checksum num-integer 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" -"checksum num-iter 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e6b7c748f995c4c29c5f5ae0248536e04a5739927c74ec0fa564805094b9f" -"checksum num-rational 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b4d7360f362cfb50dde8143501e6940b22f644be75a4cc90b2d81968908138" -"checksum num-traits 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" -"checksum proc-macro2 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "90cf5f418035b98e655e9cdb225047638296b862b42411c4e45bb88d700f7fc0" -"checksum pulldown-cmark 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "eef52fac62d0ea7b9b4dc7da092aa64ea7ec3d90af6679422d3d7e0e14b6ee15" -"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" -"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" -"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" -"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" -"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" -"checksum ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c92464b447c0ee8c4fb3824ecc8383b81717b9f1e74ba2e72540aef7b9f82997" -"checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421" -"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.101 (registry+https://github.com/rust-lang/crates.io-index)" = "9796c9b7ba2ffe7a9ce53c2287dfc48080f4b2b362fcc245a259b3a7201119dd" -"checksum serde_derive 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)" = "4b133a43a1ecd55d4086bd5b4dc6c1751c68b1bfbeba7a5040442022c7e7c02e" -"checksum serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)" = "2f72eb2a68a7dc3f9a691bfda9305a1c017a6215e5a4545c258500d2099a37c2" -"checksum skeptic 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d6fb8ed853fdc19ce09752d63f3a2e5b5158aeb261520cd75eb618bd60305165" -"checksum syn 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf" -"checksum tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" -"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" -"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" -"checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e" -"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 = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" From beeb8039d943332d0c5be122cdee0a0af2994a47 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 3 Nov 2020 23:07:28 +0000 Subject: [PATCH 20/36] Bump num from 0.3.0 to 0.3.1 Bumps [num](https://github.com/rust-num/num) from 0.3.0 to 0.3.1. - [Release notes](https://github.com/rust-num/num/releases) - [Changelog](https://github.com/rust-num/num/blob/master/RELEASES.md) - [Commits](https://github.com/rust-num/num/compare/num-0.3.0...num-0.3.1) Signed-off-by: dependabot-preview[bot] --- Cargo.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a891a6e..c92b0be 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -95,9 +95,9 @@ dependencies = [ [[package]] name = "num" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3e176191bc4faad357e3122c4747aa098ac880e88b168f106386128736cf4a" +checksum = "8b7a8e9be5e039e2ff869df49155f1c06bd01ade2117ec783e56ab0932b67a8f" dependencies = [ "num-complex", "num-integer", @@ -108,18 +108,18 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05ad05bd8977050b171b3f6b48175fea6e0565b7981059b486075e1026a9fb5" +checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5" dependencies = [ "num-traits", ] [[package]] name = "num-integer" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" dependencies = [ "autocfg", "num-traits", @@ -127,9 +127,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.41" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6e6b7c748f995c4c29c5f5ae0248536e04a5739927c74ec0fa564805094b9f" +checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" dependencies = [ "autocfg", "num-integer", @@ -138,9 +138,9 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5b4d7360f362cfb50dde8143501e6940b22f644be75a4cc90b2d81968908138" +checksum = "e5fa6d5f418879385b213d905f7cf5bf4aa553d4c380f0152d1d4f2749186fa9" dependencies = [ "autocfg", "num-integer", @@ -149,9 +149,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" dependencies = [ "autocfg", ] From d89bbdc6755a974c9abe62a01ee2deed6f21964b Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 8 Jan 2021 00:56:08 +0000 Subject: [PATCH 21/36] Bump log from 0.4.11 to 0.4.12 Bumps [log](https://github.com/rust-lang/log) from 0.4.11 to 0.4.12. - [Release notes](https://github.com/rust-lang/log/releases) - [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang/log/compare/0.4.11...0.4.12) Signed-off-by: dependabot-preview[bot] --- Cargo.lock | 16 +++++++++++----- Cargo.toml | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c92b0be..21e80bb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -36,6 +36,12 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + [[package]] name = "error-chain" version = "0.12.1" @@ -51,7 +57,7 @@ version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" dependencies = [ - "cfg-if", + "cfg-if 0.1.10", "libc", "wasi", ] @@ -76,11 +82,11 @@ checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" [[package]] name = "log" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +checksum = "7e3aeeb5dad71cdfb031ff8899db3e3e2bdcbc5abe7ad48e58857e42488dc4aa" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", ] [[package]] @@ -336,7 +342,7 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" dependencies = [ - "cfg-if", + "cfg-if 0.1.10", "libc", "rand", "redox_syscall", diff --git a/Cargo.toml b/Cargo.toml index 39b9a20..a895635 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,7 +41,7 @@ name = "mos6502" [dependencies] bitflags = "1" -log = "0.4.11" +log = "0.4.12" [dependencies.num] version = "0.3" From 6d96b8f554e7637374202c153131753057470616 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 11 Jan 2021 11:32:49 +0000 Subject: [PATCH 22/36] Bump log from 0.4.12 to 0.4.13 Bumps [log](https://github.com/rust-lang/log) from 0.4.12 to 0.4.13. - [Release notes](https://github.com/rust-lang/log/releases) - [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang/log/compare/0.4.12...0.4.13) Signed-off-by: dependabot-preview[bot] --- Cargo.lock | 16 +++++----------- Cargo.toml | 2 +- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 21e80bb..c2ce278 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -36,12 +36,6 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - [[package]] name = "error-chain" version = "0.12.1" @@ -57,7 +51,7 @@ version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" dependencies = [ - "cfg-if 0.1.10", + "cfg-if", "libc", "wasi", ] @@ -82,11 +76,11 @@ checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" [[package]] name = "log" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3aeeb5dad71cdfb031ff8899db3e3e2bdcbc5abe7ad48e58857e42488dc4aa" +checksum = "fcf3805d4480bb5b86070dcfeb9e2cb2ebc148adb753c5cca5f884d1d65a42b2" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -342,7 +336,7 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" dependencies = [ - "cfg-if 0.1.10", + "cfg-if", "libc", "rand", "redox_syscall", diff --git a/Cargo.toml b/Cargo.toml index a895635..287836e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,7 +41,7 @@ name = "mos6502" [dependencies] bitflags = "1" -log = "0.4.12" +log = "0.4.13" [dependencies.num] version = "0.3" From 85dd92615ddae7194e0e90734a524060533ffa2e Mon Sep 17 00:00:00 2001 From: Sam M W Date: Mon, 25 Jan 2021 22:57:28 +0000 Subject: [PATCH 23/36] First stab at implementing decimal mode for ADC --- src/cpu.rs | 70 +++++++++++++++++++++++++++++------------------------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/src/cpu.rs b/src/cpu.rs index 5e6705e..db21458 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -515,45 +515,51 @@ impl CPU { ); } - fn add_with_carry(&mut self, value: i8) { - if self.registers.status.contains(Status::PS_DECIMAL_MODE) { - // TODO akeeton: Implement binary-coded decimal. - debug!("binary-coded decimal not implemented for add_with_carry"); - } else { - let a_before: i8 = self.registers.accumulator; - let c_before: i8 = if self.registers.status.contains(Status::PS_CARRY) { - 1 - } else { - 0 - }; - let a_after: i8 = a_before.wrapping_add(c_before).wrapping_add(value); + fn add_with_carry(&mut self, value: i8) { + let a_before: i8 = self.registers.accumulator; + let c_before: i8 = if self.registers.status.contains(Status::PS_CARRY) { + 1 + } else { + 0 + }; + let a_after: i8 = a_before.wrapping_add(c_before).wrapping_add(value); - debug_assert_eq!( - a_after as u8, - a_before.wrapping_add(c_before).wrapping_add(value) as u8 - ); + debug_assert_eq!( + a_after as u8, + a_before.wrapping_add(c_before).wrapping_add(value) as u8 + ); - let did_carry = (a_after as u8) < (a_before as u8); + let bcd1: i8 = if (a_after & 0x0f) as u8 > 0x09 { + 0x06 + } else { + 0x00 + }; - let did_overflow = (a_before < 0 && value < 0 && a_after >= 0) - || (a_before > 0 && value > 0 && a_after <= 0); + let bcd2: i8 = if (a_after.wrapping_add(bcd1) as u8 & 0xf0) as u8 > 0x90 { + 0x60 + } else { + 0x00 + }; - let mask = Status::PS_CARRY | Status::PS_OVERFLOW; + let result: i8 = if self.registers.status.contains(Status::PS_DECIMAL_MODE) { + a_after.wrapping_add(bcd1).wrapping_add(bcd2) + } else { + a_after + }; - self.registers.status.set_with_mask( - mask, - Status::new(StatusArgs { - carry: did_carry, - overflow: did_overflow, - ..StatusArgs::none() - }), - ); + let did_carry = (result as u8) < (a_before as u8); - self.load_accumulator(a_after); + let did_overflow = (a_before < 0 && value < 0 && a_after >= 0) + || (a_before > 0 && value > 0 && a_after <= 0); - debug!("accumulator: {}", self.registers.accumulator); - } - } + let mask = Status::PS_CARRY | Status::PS_OVERFLOW; + + self.registers.status.set_with_mask( mask, Status::new(StatusArgs { carry: did_carry, overflow: did_overflow, ..StatusArgs::none() }),); + + self.load_accumulator(result); + + debug!("accumulator: {}", self.registers.accumulator); + } fn and(&mut self, value: i8) { let a_after = self.registers.accumulator & value; From 153f8e4bd7217977c224fb6a021470099006ee1c Mon Sep 17 00:00:00 2001 From: Sam M W Date: Tue, 26 Jan 2021 20:58:09 +0000 Subject: [PATCH 24/36] Some unit testing for decimal mode --- src/cpu.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/cpu.rs b/src/cpu.rs index db21458..551c0ff 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -772,6 +772,34 @@ mod tests { use super::*; use num::range_inclusive; + #[test] + fn decimal_mode_test() { + let mut cpu = CPU::new(); + cpu.registers.status.or(Status::PS_DECIMAL_MODE); + + cpu.add_with_carry(0x09); + assert_eq!(cpu.registers.accumulator, 0x09); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); + + cpu.add_with_carry(0x43); + assert_eq!(cpu.registers.accumulator, 0x52); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); + + cpu.add_with_carry(0x48); + assert_eq!(cpu.registers.accumulator, 0x00); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), true); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), true); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), true); + + } + #[test] fn add_with_carry_test() { let mut cpu = CPU::new(); From af29a7be6d22561b557403384a91ac0e486b1495 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 27 Jan 2021 03:16:16 +0000 Subject: [PATCH 25/36] Bump log from 0.4.13 to 0.4.14 Bumps [log](https://github.com/rust-lang/log) from 0.4.13 to 0.4.14. - [Release notes](https://github.com/rust-lang/log/releases) - [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang/log/compare/0.4.13...0.4.14) Signed-off-by: dependabot-preview[bot] --- Cargo.lock | 16 +++++++++++----- Cargo.toml | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c2ce278..eb198f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -36,6 +36,12 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + [[package]] name = "error-chain" version = "0.12.1" @@ -51,7 +57,7 @@ version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" dependencies = [ - "cfg-if", + "cfg-if 0.1.10", "libc", "wasi", ] @@ -76,11 +82,11 @@ checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" [[package]] name = "log" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcf3805d4480bb5b86070dcfeb9e2cb2ebc148adb753c5cca5f884d1d65a42b2" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", ] [[package]] @@ -336,7 +342,7 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" dependencies = [ - "cfg-if", + "cfg-if 0.1.10", "libc", "rand", "redox_syscall", diff --git a/Cargo.toml b/Cargo.toml index 287836e..e24faca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,7 +41,7 @@ name = "mos6502" [dependencies] bitflags = "1" -log = "0.4.13" +log = "0.4.14" [dependencies.num] version = "0.3" From 38e90170c16da834f66024aa8ffa29dbd5c86ba4 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 27 Jan 2021 20:55:58 +0100 Subject: [PATCH 26/36] Add link to open PR --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 305e02f..210780c 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ An emulator for the [MOS 6502 CPU](https://en.wikipedia.org/wiki/MOS_Technology_6502) written in Rust. This started off as a fork of [amw-zero/6502-rs](https://github.com/amw-zero/6502-rs), -which seems to be unmaintained at this point. +which seems to be [unmaintained](https://github.com/amw-zero/6502-rs/pull/36) at this point. It builds with the latest stable Rust and supports `#[no_std]` targets. From 449c17dbafdf5ad7fa1d4213939ea9f295361324 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 27 Jan 2021 21:19:00 +0100 Subject: [PATCH 27/36] Run unit tests for PRs --- .github/workflows/continuous_testing.yaml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/continuous_testing.yaml b/.github/workflows/continuous_testing.yaml index 0732838..cb8fa97 100644 --- a/.github/workflows/continuous_testing.yaml +++ b/.github/workflows/continuous_testing.yaml @@ -1,6 +1,9 @@ -name: test -on: push - +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + jobs: build_and_test: name: test From 3844a730f0356a109910c3c4ff011f95d2ebe132 Mon Sep 17 00:00:00 2001 From: Sam M W Date: Wed, 27 Jan 2021 20:31:36 +0000 Subject: [PATCH 28/36] whitespace --- src/cpu.rs | 69 +++++++++++++++++++++++------------------------------- 1 file changed, 29 insertions(+), 40 deletions(-) diff --git a/src/cpu.rs b/src/cpu.rs index 551c0ff..3b080e1 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -567,56 +567,45 @@ impl CPU { } // TODO: Implement binary-coded decimal - fn subtract_with_carry(&mut self, value: i8) { - if self.registers.status.contains(Status::PS_DECIMAL_MODE) { - debug!( - "binary-coded decimal not implemented for \ - subtract_with_carry" - ); - } else { - // A - M - (1 - C) + fn subtract_with_carry(&mut self, value: i8) { + // A - M - (1 - C) - // nc -- 'not carry' - let nc: i8 = if self.registers.status.contains(Status::PS_CARRY) { - 0 - } else { - 1 - }; + // nc -- 'not carry' + let nc: i8 = if self.registers.status.contains(Status::PS_CARRY) { + 0 + } else { + 1 + }; - let a_before: i8 = self.registers.accumulator; + let a_before: i8 = self.registers.accumulator; - let a_after = a_before.wrapping_sub(value).wrapping_sub(nc); + let a_after = a_before.wrapping_sub(value).wrapping_sub(nc); - // The carry flag is set on unsigned overflow. - let did_carry = (a_after as u8) > (a_before as u8); + // The carry flag is set on unsigned overflow. + let did_carry = (a_after as u8) > (a_before as u8); - // The overflow flag is set on two's-complement overflow. - // - // range of A is -128 to 127 - // range of - M - (1 - C) is -128 to 128 - // -(127 + 1) to -(-128 + 0) - // - let over = - ((nc == 0 && value < 0) || (nc == 1 && value < -1)) && a_before >= 0 && a_after < 0; + // The overflow flag is set on two's-complement overflow. + // + // range of A is -128 to 127 + // range of - M - (1 - C) is -128 to 128 + // -(127 + 1) to -(-128 + 0) + // + let over = + ((nc == 0 && value < 0) || (nc == 1 && value < -1)) && a_before >= 0 && a_after < 0; - let under = (a_before < 0) && (-value - nc < 0) && a_after >= 0; + let under = (a_before < 0) && (-value - nc < 0) && a_after >= 0; - let did_overflow = over || under; + let did_overflow = over || under; - let mask = Status::PS_CARRY | Status::PS_OVERFLOW; + let mask = Status::PS_CARRY | Status::PS_OVERFLOW; - self.registers.status.set_with_mask( - mask, - Status::new(StatusArgs { - carry: did_carry, - overflow: did_overflow, - ..StatusArgs::none() - }), - ); + self.registers.status.set_with_mask( + mask, + Status::new(StatusArgs { carry: did_carry, overflow: did_overflow, ..StatusArgs::none() }), + ); - self.load_accumulator(a_after); - } - } + self.load_accumulator(a_after); + } fn decrement_memory(&mut self, addr: Address) { let value_new = self.memory.get_byte(addr).wrapping_sub(1); From 51775fbe954be78117555dab5f951a31cb9be83d Mon Sep 17 00:00:00 2001 From: Sam M W Date: Wed, 27 Jan 2021 22:44:20 +0000 Subject: [PATCH 29/36] Decimal mode for SBC --- src/cpu.rs | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/src/cpu.rs b/src/cpu.rs index 3b080e1..d7243aa 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -581,9 +581,6 @@ impl CPU { let a_after = a_before.wrapping_sub(value).wrapping_sub(nc); - // The carry flag is set on unsigned overflow. - let did_carry = (a_after as u8) > (a_before as u8); - // The overflow flag is set on two's-complement overflow. // // range of A is -128 to 127 @@ -599,12 +596,34 @@ impl CPU { let mask = Status::PS_CARRY | Status::PS_OVERFLOW; + let bcd1: i8 = if (a_before & 0x0f).wrapping_sub(nc) < (value & 0x0f) { + 0x06 + } else { + 0x00 + }; + + let bcd2: i8 = if (a_after.wrapping_sub(bcd1) as u8 & 0xf0) as u8 > 0x90 { + 0x60 + } else { + 0x00 + }; + + let result: i8 = if self.registers.status.contains(Status::PS_DECIMAL_MODE) { + a_after.wrapping_sub(bcd1).wrapping_sub(bcd2) + } else { + a_after + }; + + // The carry flag is set on unsigned overflow. + let did_carry = (result as u8) > (a_before as u8); + self.registers.status.set_with_mask( mask, Status::new(StatusArgs { carry: did_carry, overflow: did_overflow, ..StatusArgs::none() }), ); - self.load_accumulator(a_after); + + self.load_accumulator(result); } fn decrement_memory(&mut self, addr: Address) { @@ -786,7 +805,19 @@ mod tests { assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), true); assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), true); - + + cpu.subtract_with_carry(0x48); + assert_eq!(cpu.registers.accumulator as u8, 0x52); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), true); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); + + cpu.subtract_with_carry(0x43); + assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); + assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); + assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); + assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); } #[test] From 2d87640692e5ce6047954f79934244b0d70eee50 Mon Sep 17 00:00:00 2001 From: Sam M W Date: Thu, 28 Jan 2021 08:58:04 +0000 Subject: [PATCH 30/36] remove worthless comment --- src/cpu.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cpu.rs b/src/cpu.rs index d7243aa..d03b6d4 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -566,7 +566,6 @@ impl CPU { self.load_accumulator(a_after); } - // TODO: Implement binary-coded decimal fn subtract_with_carry(&mut self, value: i8) { // A - M - (1 - C) From ad40c72dfe648180ea58daaa38cb9600ff7cb6ea Mon Sep 17 00:00:00 2001 From: Sam M W Date: Thu, 28 Jan 2021 10:13:44 +0000 Subject: [PATCH 31/36] separate unit test for decimal sbc --- src/cpu.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cpu.rs b/src/cpu.rs index d03b6d4..9dc5aa1 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -780,7 +780,7 @@ mod tests { use num::range_inclusive; #[test] - fn decimal_mode_test() { + fn decimal_add_test() { let mut cpu = CPU::new(); cpu.registers.status.or(Status::PS_DECIMAL_MODE); @@ -804,7 +804,13 @@ mod tests { assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), true); assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), true); + } + #[test] + fn decimal_subtract_test() { + let mut cpu = CPU::new(); + cpu.registers.status.or(Status::PS_DECIMAL_MODE); + cpu.subtract_with_carry(0x48); assert_eq!(cpu.registers.accumulator as u8, 0x52); assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), true); From b39a67b0a185892a77ac2a1535abc7ee354d7c03 Mon Sep 17 00:00:00 2001 From: Sam M W Date: Thu, 28 Jan 2021 10:17:10 +0000 Subject: [PATCH 32/36] separate unit test for decimal sbc should set carry --- src/cpu.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cpu.rs b/src/cpu.rs index 9dc5aa1..9d24eef 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -809,7 +809,8 @@ mod tests { #[test] fn decimal_subtract_test() { let mut cpu = CPU::new(); - cpu.registers.status.or(Status::PS_DECIMAL_MODE); + cpu.registers.status.or(Status::PS_DECIMAL_MODE | Status::PS_CARRY); + cpu.registers.accumulator = 0; cpu.subtract_with_carry(0x48); assert_eq!(cpu.registers.accumulator as u8, 0x52); From 4fceafa34dc89d555493892a9f148e0c854ca889 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 28 Jan 2021 23:10:26 +0100 Subject: [PATCH 33/36] Update Cargo.toml --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e24faca..0fc8f2d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,4 @@ -# Copyright (C) 2014 The 6502-rs Developers +# Copyright (C) 2014-2021 The 6502-rs Developers # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -30,7 +30,7 @@ name = "mos6502" description = "A MOS 6502 Emulator" license = "BSD-3-Clause" -version = "0.1.0" +version = "0.2.0" authors = ["The 6502-rs Developers"] build = "build.rs" exclude = ["examples/**"] From 0749b1798b341628252cfdd36089e4ac75a3c3d4 Mon Sep 17 00:00:00 2001 From: Matthias Endler Date: Thu, 28 Jan 2021 23:11:39 +0100 Subject: [PATCH 34/36] bump version --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index eb198f5..236936b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -91,7 +91,7 @@ dependencies = [ [[package]] name = "mos6502" -version = "0.1.0" +version = "0.2.0" dependencies = [ "bitflags", "log", From 7f5f6413d3fe8044506387d4c5f788ec1a8577e9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 28 Jan 2021 23:14:52 +0100 Subject: [PATCH 35/36] Add badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 210780c..732e59a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # mos6502 -[![Build Status](https://travis-ci.org/mre/mos6502.svg?branch=master)](https://travis-ci.org/mre/mos6502) ![](https://github.com/mre/mos6502/workflows/test/badge.svg) +[![docs.rs](https://docs.rs/mos6502/badge.svg)](https://docs.rs/mos6502) An emulator for the [MOS 6502 CPU](https://en.wikipedia.org/wiki/MOS_Technology_6502) written in Rust. This started off as a fork of [amw-zero/6502-rs](https://github.com/amw-zero/6502-rs), From 93a39980e4a0b63da1209253ddd36bb5b6ebf745 Mon Sep 17 00:00:00 2001 From: Matthias Endler Date: Thu, 28 Jan 2021 23:34:41 +0100 Subject: [PATCH 36/36] Add Default impls --- src/cpu.rs | 212 +++++++++++++++++++++++++---------------------- src/memory.rs | 15 +++- src/registers.rs | 29 ++++--- 3 files changed, 147 insertions(+), 109 deletions(-) diff --git a/src/cpu.rs b/src/cpu.rs index 9d24eef..f6e3f62 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -37,6 +37,12 @@ pub struct CPU { pub memory: Memory, } +impl Default for CPU { + fn default() -> Self { + Self::new() + } +} + impl CPU { pub fn new() -> CPU { CPU { @@ -515,115 +521,125 @@ impl CPU { ); } - fn add_with_carry(&mut self, value: i8) { - let a_before: i8 = self.registers.accumulator; - let c_before: i8 = if self.registers.status.contains(Status::PS_CARRY) { - 1 - } else { - 0 - }; - let a_after: i8 = a_before.wrapping_add(c_before).wrapping_add(value); + fn add_with_carry(&mut self, value: i8) { + let a_before: i8 = self.registers.accumulator; + let c_before: i8 = if self.registers.status.contains(Status::PS_CARRY) { + 1 + } else { + 0 + }; + let a_after: i8 = a_before.wrapping_add(c_before).wrapping_add(value); - debug_assert_eq!( - a_after as u8, - a_before.wrapping_add(c_before).wrapping_add(value) as u8 - ); + debug_assert_eq!( + a_after as u8, + a_before.wrapping_add(c_before).wrapping_add(value) as u8 + ); - let bcd1: i8 = if (a_after & 0x0f) as u8 > 0x09 { - 0x06 - } else { - 0x00 - }; + let bcd1: i8 = if (a_after & 0x0f) as u8 > 0x09 { + 0x06 + } else { + 0x00 + }; - let bcd2: i8 = if (a_after.wrapping_add(bcd1) as u8 & 0xf0) as u8 > 0x90 { - 0x60 - } else { - 0x00 - }; + let bcd2: i8 = if (a_after.wrapping_add(bcd1) as u8 & 0xf0) as u8 > 0x90 { + 0x60 + } else { + 0x00 + }; - let result: i8 = if self.registers.status.contains(Status::PS_DECIMAL_MODE) { - a_after.wrapping_add(bcd1).wrapping_add(bcd2) - } else { - a_after - }; + let result: i8 = if self.registers.status.contains(Status::PS_DECIMAL_MODE) { + a_after.wrapping_add(bcd1).wrapping_add(bcd2) + } else { + a_after + }; - let did_carry = (result as u8) < (a_before as u8); + let did_carry = (result as u8) < (a_before as u8); - let did_overflow = (a_before < 0 && value < 0 && a_after >= 0) - || (a_before > 0 && value > 0 && a_after <= 0); + let did_overflow = (a_before < 0 && value < 0 && a_after >= 0) + || (a_before > 0 && value > 0 && a_after <= 0); - let mask = Status::PS_CARRY | Status::PS_OVERFLOW; + let mask = Status::PS_CARRY | Status::PS_OVERFLOW; - self.registers.status.set_with_mask( mask, Status::new(StatusArgs { carry: did_carry, overflow: did_overflow, ..StatusArgs::none() }),); + self.registers.status.set_with_mask( + mask, + Status::new(StatusArgs { + carry: did_carry, + overflow: did_overflow, + ..StatusArgs::none() + }), + ); - self.load_accumulator(result); + self.load_accumulator(result); - debug!("accumulator: {}", self.registers.accumulator); - } + debug!("accumulator: {}", self.registers.accumulator); + } fn and(&mut self, value: i8) { let a_after = self.registers.accumulator & value; self.load_accumulator(a_after); } - fn subtract_with_carry(&mut self, value: i8) { - // A - M - (1 - C) + fn subtract_with_carry(&mut self, value: i8) { + // A - M - (1 - C) - // nc -- 'not carry' - let nc: i8 = if self.registers.status.contains(Status::PS_CARRY) { - 0 - } else { - 1 - }; + // nc -- 'not carry' + let nc: i8 = if self.registers.status.contains(Status::PS_CARRY) { + 0 + } else { + 1 + }; - let a_before: i8 = self.registers.accumulator; + let a_before: i8 = self.registers.accumulator; - let a_after = a_before.wrapping_sub(value).wrapping_sub(nc); + let a_after = a_before.wrapping_sub(value).wrapping_sub(nc); - // The overflow flag is set on two's-complement overflow. - // - // range of A is -128 to 127 - // range of - M - (1 - C) is -128 to 128 - // -(127 + 1) to -(-128 + 0) - // - let over = - ((nc == 0 && value < 0) || (nc == 1 && value < -1)) && a_before >= 0 && a_after < 0; + // The overflow flag is set on two's-complement overflow. + // + // range of A is -128 to 127 + // range of - M - (1 - C) is -128 to 128 + // -(127 + 1) to -(-128 + 0) + // + let over = + ((nc == 0 && value < 0) || (nc == 1 && value < -1)) && a_before >= 0 && a_after < 0; - let under = (a_before < 0) && (-value - nc < 0) && a_after >= 0; + let under = (a_before < 0) && (-value - nc < 0) && a_after >= 0; - let did_overflow = over || under; + let did_overflow = over || under; - let mask = Status::PS_CARRY | Status::PS_OVERFLOW; + let mask = Status::PS_CARRY | Status::PS_OVERFLOW; - let bcd1: i8 = if (a_before & 0x0f).wrapping_sub(nc) < (value & 0x0f) { - 0x06 - } else { - 0x00 - }; + let bcd1: i8 = if (a_before & 0x0f).wrapping_sub(nc) < (value & 0x0f) { + 0x06 + } else { + 0x00 + }; - let bcd2: i8 = if (a_after.wrapping_sub(bcd1) as u8 & 0xf0) as u8 > 0x90 { - 0x60 - } else { - 0x00 - }; - - let result: i8 = if self.registers.status.contains(Status::PS_DECIMAL_MODE) { - a_after.wrapping_sub(bcd1).wrapping_sub(bcd2) - } else { - a_after - }; + let bcd2: i8 = if (a_after.wrapping_sub(bcd1) as u8 & 0xf0) as u8 > 0x90 { + 0x60 + } else { + 0x00 + }; - // The carry flag is set on unsigned overflow. - let did_carry = (result as u8) > (a_before as u8); + let result: i8 = if self.registers.status.contains(Status::PS_DECIMAL_MODE) { + a_after.wrapping_sub(bcd1).wrapping_sub(bcd2) + } else { + a_after + }; - self.registers.status.set_with_mask( - mask, - Status::new(StatusArgs { carry: did_carry, overflow: did_overflow, ..StatusArgs::none() }), - ); + // The carry flag is set on unsigned overflow. + let did_carry = (result as u8) > (a_before as u8); + self.registers.status.set_with_mask( + mask, + Status::new(StatusArgs { + carry: did_carry, + overflow: did_overflow, + ..StatusArgs::none() + }), + ); - self.load_accumulator(result); - } + self.load_accumulator(result); + } fn decrement_memory(&mut self, addr: Address) { let value_new = self.memory.get_byte(addr).wrapping_sub(1); @@ -779,52 +795,54 @@ mod tests { use super::*; use num::range_inclusive; - #[test] - fn decimal_add_test() { - let mut cpu = CPU::new(); - cpu.registers.status.or(Status::PS_DECIMAL_MODE); - - cpu.add_with_carry(0x09); + #[test] + fn decimal_add_test() { + let mut cpu = CPU::new(); + cpu.registers.status.or(Status::PS_DECIMAL_MODE); + + cpu.add_with_carry(0x09); assert_eq!(cpu.registers.accumulator, 0x09); assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); - cpu.add_with_carry(0x43); + cpu.add_with_carry(0x43); assert_eq!(cpu.registers.accumulator, 0x52); assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); - cpu.add_with_carry(0x48); + cpu.add_with_carry(0x48); assert_eq!(cpu.registers.accumulator, 0x00); assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), true); assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), true); assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), true); - } + } - #[test] - fn decimal_subtract_test() { - let mut cpu = CPU::new(); - cpu.registers.status.or(Status::PS_DECIMAL_MODE | Status::PS_CARRY); + #[test] + fn decimal_subtract_test() { + let mut cpu = CPU::new(); + cpu.registers + .status + .or(Status::PS_DECIMAL_MODE | Status::PS_CARRY); cpu.registers.accumulator = 0; - - cpu.subtract_with_carry(0x48); + + cpu.subtract_with_carry(0x48); assert_eq!(cpu.registers.accumulator as u8, 0x52); assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), true); assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); - cpu.subtract_with_carry(0x43); + cpu.subtract_with_carry(0x43); assert_eq!(cpu.registers.status.contains(Status::PS_CARRY), false); assert_eq!(cpu.registers.status.contains(Status::PS_ZERO), false); assert_eq!(cpu.registers.status.contains(Status::PS_NEGATIVE), false); assert_eq!(cpu.registers.status.contains(Status::PS_OVERFLOW), false); - } + } #[test] fn add_with_carry_test() { diff --git a/src/memory.rs b/src/memory.rs index 7c9596f..a70f8cd 100644 --- a/src/memory.rs +++ b/src/memory.rs @@ -54,9 +54,17 @@ pub struct Memory { bytes: [u8; MEMORY_SIZE], } +impl Default for Memory { + fn default() -> Self { + Self::new() + } +} + impl Memory { pub fn new() -> Memory { - Memory { bytes: [0; MEMORY_SIZE] } + Memory { + bytes: [0; MEMORY_SIZE], + } } pub fn get_byte(&self, address: Address) -> u8 { @@ -101,7 +109,10 @@ mod tests { fn test_memory_set_bytes() { let mut memory = Memory::new(); memory.set_bytes(Address(0x0100), &[1, 2, 3, 4, 5]); - assert_eq!(memory.get_slice(Address(0x00FF), AddressDiff(7)), &[0, 1, 2, 3, 4, 5, 0]); + assert_eq!( + memory.get_slice(Address(0x00FF), AddressDiff(7)), + &[0, 1, 2, 3, 4, 5, 0] + ); } #[test] diff --git a/src/registers.rs b/src/registers.rs index e28fe32..96f12df 100644 --- a/src/registers.rs +++ b/src/registers.rs @@ -26,7 +26,7 @@ // POSSIBILITY OF SUCH DAMAGE. use address::{Address, AddressDiff}; -use memory::{STACK_ADDRESS_LO, STACK_ADDRESS_HI}; +use memory::{STACK_ADDRESS_HI, STACK_ADDRESS_LO}; // Useful for constructing Status instances #[derive(Copy, Clone)] @@ -88,15 +88,18 @@ impl Status { }) } - pub fn new(StatusArgs { negative, - overflow, - unused, - brk, - decimal_mode, - disable_interrupts, - zero, - carry }: StatusArgs) -> Status - { + pub fn new( + StatusArgs { + negative, + overflow, + unused, + brk, + decimal_mode, + disable_interrupts, + zero, + carry, + }: StatusArgs, + ) -> Status { let mut out = Status::empty(); if negative { @@ -169,6 +172,12 @@ pub struct Registers { pub status: Status, } +impl Default for Registers { + fn default() -> Self { + Self::new() + } +} + impl Registers { pub fn new() -> Registers { // TODO akeeton: Revisit these defaults.