Skip to content

Commit a91dce5

Browse files
committed
fix: more nestest.nes
1 parent a04cc18 commit a91dce5

File tree

2 files changed

+23
-16
lines changed

2 files changed

+23
-16
lines changed

justfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ test_watch:
1717
git ls-files | entr cargo test
1818

1919
nestest:
20-
NESTEST_HACK=1 cargo run > myout.log
20+
NESTEST_HACK=1 cargo run roms/nestest.nes > myout.log
2121

2222
pre_commit: lint test build

src/core.rs

+22-15
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,9 @@ impl Cpu {
171171
AddressingMode::AbsoluteX => self.mem_read_u16(self.pc).wrapping_add(self.x as u16),
172172
AddressingMode::AbsoluteY => self.mem_read_u16(self.pc).wrapping_add(self.y as u16),
173173
AddressingMode::Indirect => {
174-
let base = self.mem_read(self.pc);
174+
let base = self.mem_read_u16(self.pc);
175175
// indirect
176-
self.mem_read_zero_page_wrapping(base)
176+
self.mem_read_u16(base)
177177
}
178178
AddressingMode::IndirectX => {
179179
// "Indexed indirect"
@@ -823,33 +823,34 @@ impl Cpu {
823823
let hi = (param2 as u16) << 8;
824824
let addr: u16 = hi + (param1 as u16);
825825
match name {
826-
OpName::STX | OpName::LDX | OpName::LDA => format!(
826+
OpName::JMP | OpName::JSR => format!("${:02X}{:02X}", param2, param1,),
827+
_ => format!(
827828
"${:02X}{:02X} = {:02X}",
828829
param2,
829830
param1,
830831
self.mem_read(addr)
831832
),
832-
_ => format!("${:02X}{:02X}", param2, param1,),
833833
}
834834
}
835835
AddressingMode::AbsoluteX => format!("${:02X}{:02X},X", param2, param1),
836836
AddressingMode::AbsoluteY => format!("${:02X}{:02X},Y", param2, param1),
837837
AddressingMode::IndirectX => {
838-
let added = param1.wrapping_add(self.x);
839-
let target = self.mem_read_u16(added as u16);
840-
let data = self.mem_read(target);
838+
let indexed = param1.wrapping_add(self.x);
839+
let indirect = self.mem_read_zero_page_wrapping(indexed);
840+
let data = self.mem_read(indirect);
841+
841842
format!(
842843
"(${:02X},X) @ {:02X} = {:04X} = {:02X}",
843-
param1, added, target, data
844+
param1, indexed, indirect, data
844845
)
845846
}
846847
AddressingMode::IndirectY => {
847-
let val = self.mem_read_u16(param1 as u16);
848-
let val_plus_y = val.wrapping_add(self.y as u16);
849-
let data = self.mem_read(val_plus_y);
848+
let indirect = self.mem_read_zero_page_wrapping(param1);
849+
let indexed = indirect.wrapping_add(self.y as u16);
850+
let data = self.mem_read(indexed);
850851
format!(
851852
"(${:02X}),Y = {:04X} @ {:04X} = {:02X}",
852-
param1, val, val_plus_y, data
853+
param1, indirect, indexed, data
853854
)
854855
}
855856
AddressingMode::Relative => {
@@ -858,8 +859,13 @@ impl Cpu {
858859
(self.pc as isize + 2 + (param1 as i8) as isize) as u16
859860
)
860861
}
861-
AddressingMode::Accumulator => format!("A"),
862-
// AddressingMode::Indirect => todo!(),
862+
AddressingMode::Accumulator => "A".to_string(),
863+
AddressingMode::Indirect => {
864+
let hi = (param2 as u16) << 8;
865+
let addr: u16 = hi + (param1 as u16);
866+
let indirect = self.mem_read_u16(addr);
867+
format!("(${:02X}{:02X}) = {:04X}", param2, param1, indirect)
868+
}
863869
_ => "".to_string(),
864870
};
865871

@@ -1535,7 +1541,8 @@ mod tests {
15351541

15361542
#[test]
15371543
fn test_nestest() {
1538-
let max_known_good_line = 1061;
1544+
let max_known_good_line = 3347;
1545+
// let max_known_good_line = 4000;
15391546

15401547
let program = fs::read("roms/nestest.nes").unwrap();
15411548

0 commit comments

Comments
 (0)