@@ -51,8 +51,8 @@ pub enum AddressingMode {
51
51
pub enum Flag {
52
52
Negative ,
53
53
Overflow ,
54
- Break2 ,
55
- Break ,
54
+ // Break2,
55
+ // Break,
56
56
Decimal ,
57
57
Interrupt ,
58
58
Zero ,
@@ -100,11 +100,11 @@ impl Cpu {
100
100
let rom = Rom :: new_test_rom ( vec ! [ ] ) ;
101
101
Cpu {
102
102
pc : 0 ,
103
- sp : 0xfd , // TODO: should it be inited to FD? or should something be put on it immediately?
103
+ sp : 0xfd ,
104
104
a : 0 ,
105
105
x : 0 ,
106
106
y : 0 ,
107
- status : 0 ,
107
+ status : 0b100100 ,
108
108
bus : Bus :: new ( rom) ,
109
109
}
110
110
}
@@ -215,8 +215,9 @@ impl Cpu {
215
215
self . a = 0 ;
216
216
self . x = 0 ;
217
217
self . y = 0 ;
218
- self . sp = 0xff ;
218
+ self . sp = 0xfd ;
219
219
self . pc = self . mem_read_u16 ( 0xFFFC ) ;
220
+ // self.status = 0b100100; // TODO: This breaks my unit tests, but seems correct
220
221
self . status = 0 ; // TODO: is this the correct initial state? I see various tests where both break flags are on
221
222
}
222
223
@@ -243,20 +244,31 @@ impl Cpu {
243
244
OpName :: STX => self . stx ( & mode) ,
244
245
OpName :: STY => self . sty ( & mode) ,
245
246
OpName :: BIT => self . bit ( & mode) ,
247
+
246
248
OpName :: NOP => self . nop ( ) ,
247
249
OpName :: TXS => self . txs ( ) ,
248
250
OpName :: TSX => self . tsx ( ) ,
249
251
OpName :: PHA => self . pha ( ) ,
250
252
OpName :: PLA => self . pla ( ) ,
251
253
OpName :: PHP => self . php ( ) ,
252
254
OpName :: PLP => self . plp ( ) ,
255
+
253
256
OpName :: ORA => self . ora ( & mode) ,
254
257
OpName :: AND => self . and ( & mode) ,
255
258
OpName :: ADC => self . adc ( & mode) ,
256
259
OpName :: EOR => self . eor ( & mode) ,
257
260
OpName :: CMP => self . cmp ( & mode) ,
258
261
OpName :: CPX => self . cpx ( & mode) ,
259
262
OpName :: CPY => self . cpy ( & mode) ,
263
+
264
+ OpName :: TAX => self . tax ( ) ,
265
+ OpName :: TXA => self . txa ( ) ,
266
+ OpName :: DEX => self . dex ( ) ,
267
+ OpName :: INX => self . inx ( ) ,
268
+ OpName :: TAY => self . tay ( ) ,
269
+ OpName :: TYA => self . tya ( ) ,
270
+ OpName :: DEY => self . dey ( ) ,
271
+ OpName :: INY => self . iny ( ) ,
260
272
}
261
273
self . pc += size - 1 ;
262
274
@@ -384,16 +396,6 @@ impl Cpu {
384
396
// RTS
385
397
0x60 => self . rts ( ) ,
386
398
387
- // Register Instructions
388
- 0xAA => self . tax ( ) ,
389
- 0x8A => self . txa ( ) ,
390
- 0xCA => self . dex ( ) ,
391
- 0xE8 => self . inx ( ) ,
392
- 0xA8 => self . tay ( ) ,
393
- 0x98 => self . tya ( ) ,
394
- 0x88 => self . dey ( ) ,
395
- 0xC8 => self . iny ( ) ,
396
-
397
399
// SBC
398
400
0xE9 => {
399
401
self . sbc ( & AddressingMode :: Immediate ) ;
@@ -887,8 +889,8 @@ impl Cpu {
887
889
Flag :: Zero => 1 ,
888
890
Flag :: Interrupt => 2 ,
889
891
Flag :: Decimal => 3 ,
890
- Flag :: Break => 4 ,
891
- Flag :: Break2 => 5 ,
892
+ // Flag::Break => 4,
893
+ // Flag::Break2 => 5,
892
894
Flag :: Overflow => 6 ,
893
895
Flag :: Negative => 7 ,
894
896
} ;
@@ -909,8 +911,8 @@ impl Cpu {
909
911
Flag :: Zero => 1 ,
910
912
Flag :: Interrupt => 2 ,
911
913
Flag :: Decimal => 3 ,
912
- Flag :: Break => 4 ,
913
- Flag :: Break2 => 5 ,
914
+ // Flag::Break => 4,
915
+ // Flag::Break2 => 5,
914
916
Flag :: Overflow => 6 ,
915
917
Flag :: Negative => 7 ,
916
918
} ;
@@ -1611,8 +1613,8 @@ mod tests {
1611
1613
bus. mem_write ( 101 , 0x33 ) ;
1612
1614
1613
1615
//data
1614
- bus. mem_write ( 0x33 , 00 ) ;
1615
- bus. mem_write ( 0x34 , 04 ) ;
1616
+ bus. mem_write ( 0x33 , 0 ) ;
1617
+ bus. mem_write ( 0x34 , 4 ) ;
1616
1618
1617
1619
//target cell
1618
1620
bus. mem_write ( 0x400 , 0xAA ) ;
0 commit comments