@@ -171,9 +171,9 @@ impl Cpu {
171
171
AddressingMode :: AbsoluteX => self . mem_read_u16 ( self . pc ) . wrapping_add ( self . x as u16 ) ,
172
172
AddressingMode :: AbsoluteY => self . mem_read_u16 ( self . pc ) . wrapping_add ( self . y as u16 ) ,
173
173
AddressingMode :: Indirect => {
174
- let base = self . mem_read ( self . pc ) ;
174
+ let base = self . mem_read_u16 ( self . pc ) ;
175
175
// indirect
176
- self . mem_read_zero_page_wrapping ( base)
176
+ self . mem_read_u16 ( base)
177
177
}
178
178
AddressingMode :: IndirectX => {
179
179
// "Indexed indirect"
@@ -823,33 +823,34 @@ impl Cpu {
823
823
let hi = ( param2 as u16 ) << 8 ;
824
824
let addr: u16 = hi + ( param1 as u16 ) ;
825
825
match name {
826
- OpName :: STX | OpName :: LDX | OpName :: LDA => format ! (
826
+ OpName :: JMP | OpName :: JSR => format ! ( "${:02X}{:02X}" , param2, param1, ) ,
827
+ _ => format ! (
827
828
"${:02X}{:02X} = {:02X}" ,
828
829
param2,
829
830
param1,
830
831
self . mem_read( addr)
831
832
) ,
832
- _ => format ! ( "${:02X}{:02X}" , param2, param1, ) ,
833
833
}
834
834
}
835
835
AddressingMode :: AbsoluteX => format ! ( "${:02X}{:02X},X" , param2, param1) ,
836
836
AddressingMode :: AbsoluteY => format ! ( "${:02X}{:02X},Y" , param2, param1) ,
837
837
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
+
841
842
format ! (
842
843
"(${:02X},X) @ {:02X} = {:04X} = {:02X}" ,
843
- param1, added , target , data
844
+ param1, indexed , indirect , data
844
845
)
845
846
}
846
847
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 ) ;
850
851
format ! (
851
852
"(${:02X}),Y = {:04X} @ {:04X} = {:02X}" ,
852
- param1, val , val_plus_y , data
853
+ param1, indirect , indexed , data
853
854
)
854
855
}
855
856
AddressingMode :: Relative => {
@@ -858,8 +859,13 @@ impl Cpu {
858
859
( self . pc as isize + 2 + ( param1 as i8 ) as isize ) as u16
859
860
)
860
861
}
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
+ }
863
869
_ => "" . to_string ( ) ,
864
870
} ;
865
871
@@ -1535,7 +1541,8 @@ mod tests {
1535
1541
1536
1542
#[ test]
1537
1543
fn test_nestest ( ) {
1538
- let max_known_good_line = 1061 ;
1544
+ let max_known_good_line = 3347 ;
1545
+ // let max_known_good_line = 4000;
1539
1546
1540
1547
let program = fs:: read ( "roms/nestest.nes" ) . unwrap ( ) ;
1541
1548
0 commit comments