Skip to content

Commit a753e1d

Browse files
authored
Merge pull request #4 from DylanSpeiser/internal
v2.6: Slight speed improvement
2 parents 7695361 + 2291752 commit a753e1d

File tree

5 files changed

+231
-10
lines changed

5 files changed

+231
-10
lines changed

src/CPU.java

Lines changed: 230 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -319,10 +319,16 @@ void clock() {
319319

320320
cycles = lookup[Byte.toUnsignedInt(opcode)].cycles;
321321

322-
try {
323-
this.getClass().getMethod(lookup[Byte.toUnsignedInt(opcode)].addressMode).invoke(this);
324-
this.getClass().getMethod(lookup[Byte.toUnsignedInt(opcode)].opcode).invoke(this);
325-
} catch (Exception e) {e.printStackTrace();}
322+
//Execute the functions corresponding to the addressing mode and opcode
323+
324+
//this.getClass().getMethod(lookup[Byte.toUnsignedInt(opcode)].addressMode).invoke(this);
325+
//this.getClass().getMethod(lookup[Byte.toUnsignedInt(opcode)].opcode).invoke(this);
326+
327+
Instruction currentInstruction = lookup[Byte.toUnsignedInt(opcode)];
328+
329+
executeAddressModeFunction(currentInstruction.addressMode);
330+
executeOpcodeFunction(currentInstruction.opcode);
331+
326332
} else {
327333
if (interruptRequested)
328334
irq();
@@ -361,6 +367,226 @@ void clock() {
361367
cycles = 0;
362368
}
363369
}
370+
371+
void executeAddressModeFunction(String addressMode) {
372+
switch (addressMode) {
373+
case "IMP":
374+
IMP();
375+
break;
376+
case "IMM":
377+
IMM();
378+
break;
379+
case "ZPP":
380+
ZPP();
381+
break;
382+
case "ZPX":
383+
ZPX();
384+
break;
385+
case "ZPY":
386+
ZPY();
387+
break;
388+
case "REL":
389+
REL();
390+
break;
391+
case "ABS":
392+
ABS();
393+
break;
394+
case "ABX":
395+
ABX();
396+
break;
397+
case "ABY":
398+
ABY();
399+
break;
400+
case "IND":
401+
IND();
402+
break;
403+
case "IZX":
404+
IZX();
405+
break;
406+
case "IZY":
407+
IZY();
408+
break;
409+
default:
410+
System.out.println("Something has gone seriously wrong! AddressMode: "+addressMode);
411+
break;
412+
}
413+
}
414+
415+
void executeOpcodeFunction(String opcode) {
416+
switch (opcode) {
417+
case "ADC":
418+
ADC();
419+
break;
420+
case "AND":
421+
AND();
422+
break;
423+
case "ASL":
424+
ASL();
425+
break;
426+
case "BCC":
427+
BCC();
428+
break;
429+
case "BCS":
430+
BCS();
431+
break;
432+
case "BEQ":
433+
BEQ();
434+
break;
435+
case "BIT":
436+
BIT();
437+
break;
438+
case "BMI":
439+
BMI();
440+
break;
441+
case "BNE":
442+
BNE();
443+
break;
444+
case "BPL":
445+
BPL();
446+
break;
447+
case "BRK":
448+
BRK();
449+
break;
450+
case "BVC":
451+
BVC();
452+
break;
453+
case "BVS":
454+
BVS();
455+
break;
456+
case "CLC":
457+
CLC();
458+
break;
459+
case "CLD":
460+
CLD();
461+
break;
462+
case "CLI":
463+
CLI();
464+
break;
465+
case "CLV":
466+
CLV();
467+
break;
468+
case "CMP":
469+
CMP();
470+
break;
471+
case "CPX":
472+
CPX();
473+
break;
474+
case "CPY":
475+
CPY();
476+
break;
477+
case "DEC":
478+
DEC();
479+
break;
480+
case "DEX":
481+
DEX();
482+
break;
483+
case "DEY":
484+
DEY();
485+
break;
486+
case "EOR":
487+
EOR();
488+
break;
489+
case "INC":
490+
INC();
491+
break;
492+
case "INX":
493+
INX();
494+
break;
495+
case "INY":
496+
INY();
497+
break;
498+
case "JMP":
499+
JMP();
500+
break;
501+
case "JSR":
502+
JSR();
503+
break;
504+
case "LDA":
505+
LDA();
506+
break;
507+
case "LDX":
508+
LDX();
509+
break;
510+
case "LDY":
511+
LDY();
512+
break;
513+
case "LSR":
514+
LSR();
515+
break;
516+
case "NOP":
517+
NOP();
518+
break;
519+
case "ORA":
520+
ORA();
521+
break;
522+
case "PHA":
523+
PHA();
524+
break;
525+
case "PHP":
526+
PHP();
527+
break;
528+
case "PLA":
529+
PLA();
530+
break;
531+
case "PLP":
532+
PLP();
533+
break;
534+
case "ROL":
535+
ROL();
536+
break;
537+
case "ROR":
538+
ROR();
539+
break;
540+
case "RTI":
541+
RTI();
542+
break;
543+
case "RTS":
544+
RTS();
545+
break;
546+
case "SBC":
547+
SBC();
548+
break;
549+
case "SEC":
550+
SEC();
551+
break;
552+
case "SED":
553+
SED();
554+
break;
555+
case "SEI":
556+
SEI();
557+
break;
558+
case "STA":
559+
STA();
560+
break;
561+
case "STX":
562+
STX();
563+
break;
564+
case "STY":
565+
STY();
566+
break;
567+
case "TAX":
568+
TAX();
569+
break;
570+
case "TAY":
571+
TAY();
572+
break;
573+
case "TSX":
574+
TSX();
575+
break;
576+
case "TXA":
577+
TXA();
578+
break;
579+
case "TXS":
580+
TXS();
581+
break;
582+
case "TYA":
583+
TYA();
584+
break;
585+
case "XXX":
586+
XXX();
587+
break;
588+
}
589+
}
364590

365591
//Input Signal Handlers
366592
void reset() {

src/DisplayPanel.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import java.awt.event.*;
33
import javax.swing.JPanel;
44
import javax.swing.Timer;
5-
import java.io.File;
65
import java.io.IOException;
76

87
public class DisplayPanel extends JPanel implements ActionListener, KeyListener {

src/EaterEmulator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import javax.swing.*;
99

1010
public class EaterEmulator extends JFrame implements ActionListener {
11-
public static String versionString = "2.5";
11+
public static String versionString = "2.6";
1212
public static boolean debug = false;
1313

1414
//Swing Things

src/GPU.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import java.awt.event.ActionListener;
66
import java.io.File;
77
import java.io.InputStream;
8-
import java.net.URISyntaxException;
9-
import javax.imageio.ImageIO;
108
import java.nio.file.*;
119
import java.util.Scanner;
1210

@@ -122,7 +120,6 @@ public GPU(boolean isVisible) {
122120
this(new RAM(),isVisible);
123121
}
124122

125-
@SuppressWarnings("unused")
126123
public static void main(String[] args) {
127124
GPU gpu = new GPU(true);
128125
gpu.setVisible(true);

src/LCD.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import java.awt.GraphicsEnvironment;
66
import java.awt.event.ActionEvent;
77
import java.awt.event.ActionListener;
8-
import java.io.File;
98
import java.io.IOException;
109
import java.util.Arrays;
1110
import java.util.Scanner;

0 commit comments

Comments
 (0)