From cb2658f3e3ece728d987836045a79111fdb9ee14 Mon Sep 17 00:00:00 2001 From: Andrey Kutejko Date: Sun, 6 Oct 2019 18:56:51 +0200 Subject: [PATCH] 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