@@ -77,6 +77,8 @@ public CPU() {
77
77
lookup [0xD0 ] = new Instruction ("BNE" ,"REL" ,2 );
78
78
79
79
lookup [0x10 ] = new Instruction ("BPL" ,"REL" ,2 );
80
+
81
+ lookup [0x80 ] = new Instruction ("BRA" ,"REL" ,2 );
80
82
81
83
lookup [0x00 ] = new Instruction ("BRK" ,"IMP" ,2 );
82
84
@@ -182,10 +184,18 @@ public CPU() {
182
184
lookup [0x48 ] = new Instruction ("PHA" ,"IMP" ,3 );
183
185
184
186
lookup [0x08 ] = new Instruction ("PHP" ,"IMP" ,3 );
187
+
188
+ lookup [0xDA ] = new Instruction ("PHX" ,"IMP" ,3 );
189
+
190
+ lookup [0x5A ] = new Instruction ("PHY" ,"IMP" ,3 );
185
191
186
192
lookup [0x68 ] = new Instruction ("PLA" ,"IMP" ,4 );
187
193
188
194
lookup [0x28 ] = new Instruction ("PLP" ,"IMP" ,4 );
195
+
196
+ lookup [0xFA ] = new Instruction ("PLX" , "IMP" ,4 );
197
+
198
+ lookup [0x7A ] = new Instruction ("PLY" ,"IMP" ,4 );
189
199
190
200
lookup [0x2A ] = new Instruction ("ROL" ,"IMP" ,2 );
191
201
lookup [0x26 ] = new Instruction ("ROL" ,"ZPP" ,5 );
@@ -233,6 +243,11 @@ public CPU() {
233
243
lookup [0x84 ] = new Instruction ("STY" ,"ZPP" ,3 );
234
244
lookup [0x94 ] = new Instruction ("STY" ,"ZPX" ,4 );
235
245
lookup [0x8C ] = new Instruction ("STY" ,"ABS" ,4 );
246
+
247
+ lookup [0x64 ] = new Instruction ("STZ" ,"ZPP" ,3 );
248
+ lookup [0x74 ] = new Instruction ("STZ" ,"ZPX" ,4 );
249
+ lookup [0x9C ] = new Instruction ("STZ" ,"ABS" ,4 );
250
+ lookup [0x9E ] = new Instruction ("STZ" ,"ABX" ,4 );
236
251
237
252
lookup [0xAA ] = new Instruction ("TAX" ,"IMP" ,2 );
238
253
@@ -444,6 +459,9 @@ void executeOpcodeFunction(String opcode) {
444
459
case "BPL" :
445
460
BPL ();
446
461
break ;
462
+ case "BRA" :
463
+ BRA ();
464
+ break ;
447
465
case "BRK" :
448
466
BRK ();
449
467
break ;
@@ -525,12 +543,24 @@ void executeOpcodeFunction(String opcode) {
525
543
case "PHP" :
526
544
PHP ();
527
545
break ;
546
+ case "PHX" :
547
+ PHX ();
548
+ break ;
549
+ case "PHY" :
550
+ PHY ();
551
+ break ;
528
552
case "PLA" :
529
553
PLA ();
530
554
break ;
531
555
case "PLP" :
532
556
PLP ();
533
557
break ;
558
+ case "PLX" :
559
+ PLX ();
560
+ break ;
561
+ case "PLY" :
562
+ PLY ();
563
+ break ;
534
564
case "ROL" :
535
565
ROL ();
536
566
break ;
@@ -564,6 +594,9 @@ void executeOpcodeFunction(String opcode) {
564
594
case "STY" :
565
595
STY ();
566
596
break ;
597
+ case "STZ" :
598
+ STZ ();
599
+ break ;
567
600
case "TAX" :
568
601
TAX ();
569
602
break ;
@@ -887,6 +920,16 @@ public void BPL() {
887
920
}
888
921
}
889
922
923
+ public void BRA () {
924
+ cycles ++;
925
+ addressAbsolute = (short )(programCounter +addressRelative );
926
+
927
+ if ((addressAbsolute &0xFF00 ) != (programCounter & 0xFF00 ))
928
+ cycles ++;
929
+
930
+ programCounter = addressAbsolute ;
931
+ }
932
+
890
933
public void BRK () {
891
934
programCounter ++;
892
935
@@ -1098,6 +1141,16 @@ public void PHP() {
1098
1141
setFlag ('U' ,false );
1099
1142
stackPointer --;
1100
1143
}
1144
+
1145
+ public void PHX () {
1146
+ Bus .write ((short )(0x0100 +Byte .toUnsignedInt (stackPointer )), x );
1147
+ stackPointer --;
1148
+ }
1149
+
1150
+ public void PHY () {
1151
+ Bus .write ((short )(0x0100 +Byte .toUnsignedInt (stackPointer )), y );
1152
+ stackPointer --;
1153
+ }
1101
1154
1102
1155
public void PLA () {
1103
1156
stackPointer ++;
@@ -1112,6 +1165,20 @@ public void PLP() {
1112
1165
setFlag ('U' , true );
1113
1166
}
1114
1167
1168
+ public void PLX () {
1169
+ stackPointer ++;
1170
+ x = Bus .read ((short )(0x0100 +Byte .toUnsignedInt (stackPointer )));
1171
+ setFlag ('Z' , x == 0 );
1172
+ setFlag ('N' , (x & 0x80 ) == 0x80 );
1173
+ }
1174
+
1175
+ public void PLY () {
1176
+ stackPointer ++;
1177
+ y = Bus .read ((short )(0x0100 +Byte .toUnsignedInt (stackPointer )));
1178
+ setFlag ('Z' , y == 0 );
1179
+ setFlag ('N' , (y & 0x80 ) == 0x80 );
1180
+ }
1181
+
1115
1182
public void ROL () {
1116
1183
fetch ();
1117
1184
short temp = (short )((fetched <<1 ) | (getFlag ('C' ) ? 1 : 0 ));
@@ -1196,6 +1263,10 @@ public void STX() {
1196
1263
public void STY () {
1197
1264
Bus .write (addressAbsolute , y );
1198
1265
}
1266
+
1267
+ public void STZ () {
1268
+ Bus .write (addressAbsolute , (byte )0 );
1269
+ }
1199
1270
1200
1271
public void TAX () {
1201
1272
x = a ;
0 commit comments