generated from sigonasr2/CPlusPlusProjectTemplate
Fixed the subtraction carryover bug!
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
3f7a94e82f
commit
ac0d78a18b
Binary file not shown.
33
main.cpp
33
main.cpp
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
using namespace olc;
|
using namespace olc;
|
||||||
|
|
||||||
bool USE_DEBUG_DISPLAY=false;
|
bool USE_DEBUG_DISPLAY=true;
|
||||||
int EMULATOR_SCREEN_WIDTH = 64;
|
int EMULATOR_SCREEN_WIDTH = 64;
|
||||||
int EMULATOR_SCREEN_HEIGHT = 32;
|
int EMULATOR_SCREEN_HEIGHT = 32;
|
||||||
int EMULATOR_PIXEL_SIZE=5;
|
int EMULATOR_PIXEL_SIZE=5;
|
||||||
@ -154,12 +154,23 @@ public:
|
|||||||
advanceTimers(); //After 10 instructions, 1/60th of a second has passed.
|
advanceTimers(); //After 10 instructions, 1/60th of a second has passed.
|
||||||
}
|
}
|
||||||
DrawDisplay();
|
DrawDisplay();
|
||||||
|
} else
|
||||||
|
if (GetKey(END).bHeld){
|
||||||
|
for (int i=0;i<10;i++){
|
||||||
|
RunInstruction();
|
||||||
|
instructionCount++;
|
||||||
|
}
|
||||||
|
advanceTimers(); //After 10 instructions, 1/60th of a second has passed.
|
||||||
|
DrawDisplay();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (IsTextEntryEnabled()){
|
if (IsTextEntryEnabled()){
|
||||||
DrawStringDecal({2,2},"Goto Memory Address: "+TextEntryGetString());
|
DrawStringDecal({2,2},"Goto Memory Address: "+TextEntryGetString());
|
||||||
}
|
}
|
||||||
|
if (GetKey(F12).bPressed){
|
||||||
|
PAUSED=!PAUSED;
|
||||||
|
}
|
||||||
|
|
||||||
std::stringstream s;
|
std::stringstream s;
|
||||||
s<<"PC: 0x"<<std::setfill('0')<< std::setw(4)<<std::hex<<pc;
|
s<<"PC: 0x"<<std::setfill('0')<< std::setw(4)<<std::hex<<pc;
|
||||||
@ -190,6 +201,10 @@ public:
|
|||||||
DrawStringDecal(vi2d{12+i/8*64,EMULATOR_PIXEL_SIZE*EMULATOR_SCREEN_HEIGHT+54+i%8*10},s.str());
|
DrawStringDecal(vi2d{12+i/8*64,EMULATOR_PIXEL_SIZE*EMULATOR_SCREEN_HEIGHT+54+i%8*10},s.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DrawStringDecal(vi2d{8+164,EMULATOR_PIXEL_SIZE*EMULATOR_SCREEN_HEIGHT+44},"TIMERS");
|
||||||
|
DrawStringDecal(vi2d{12+164,EMULATOR_PIXEL_SIZE*EMULATOR_SCREEN_HEIGHT+54},"DELAY "+std::to_string(delay_timer));
|
||||||
|
DrawStringDecal(vi2d{12+164,EMULATOR_PIXEL_SIZE*EMULATOR_SCREEN_HEIGHT+64},"SOUND "+std::to_string(sound_timer));
|
||||||
|
|
||||||
std::stringstream index_s;
|
std::stringstream index_s;
|
||||||
index_s<<"0x"<<std::hex<<std::setfill('0')<<std::setw(4)<<index;
|
index_s<<"0x"<<std::hex<<std::setfill('0')<<std::setw(4)<<index;
|
||||||
DrawStringDecal(vi2d{8,EMULATOR_PIXEL_SIZE*EMULATOR_SCREEN_HEIGHT+64+10*8},"INDEX: "+index_s.str());
|
DrawStringDecal(vi2d{8,EMULATOR_PIXEL_SIZE*EMULATOR_SCREEN_HEIGHT+64+10*8},"INDEX: "+index_s.str());
|
||||||
@ -364,7 +379,7 @@ public:
|
|||||||
return jump.str();
|
return jump.str();
|
||||||
}break;
|
}break;
|
||||||
case 0xC:{//Random number from 0 to NN.
|
case 0xC:{//Random number from 0 to NN.
|
||||||
return "RAND (0-"+std::to_string(NN)+")";
|
return "RAND (0-"+std::to_string(NN)+") SET TO V"+std::to_string(X);
|
||||||
}break;
|
}break;
|
||||||
case 0xD:{ //Display
|
case 0xD:{ //Display
|
||||||
return "DISPLAY X:[V"+std::to_string(X)+"],Y:[V"+std::to_string(Y)+"] H:"+std::to_string(N);
|
return "DISPLAY X:[V"+std::to_string(X)+"],Y:[V"+std::to_string(Y)+"] H:"+std::to_string(N);
|
||||||
@ -503,10 +518,10 @@ public:
|
|||||||
reg[0xF]=carryFlag;
|
reg[0xF]=carryFlag;
|
||||||
}break;
|
}break;
|
||||||
case 0x5:{// sets VX to the result of VX - VY.
|
case 0x5:{// sets VX to the result of VX - VY.
|
||||||
bool carryFlag=0;
|
bool carryFlag=false;
|
||||||
if (reg[X]>reg[Y]){
|
if (reg[X]>=reg[Y]){
|
||||||
//reg[0xF]=1;
|
//reg[0xF]=1;
|
||||||
carryFlag=1;
|
carryFlag=true;
|
||||||
}
|
}
|
||||||
reg[X]-=reg[Y];
|
reg[X]-=reg[Y];
|
||||||
reg[0xF]=carryFlag;
|
reg[0xF]=carryFlag;
|
||||||
@ -527,7 +542,7 @@ public:
|
|||||||
case 0x7:{//sets VX to the result of VY - VX. It's a reverse subtraction.
|
case 0x7:{//sets VX to the result of VY - VX. It's a reverse subtraction.
|
||||||
//reg[0xF]=0;
|
//reg[0xF]=0;
|
||||||
bool carryFlag=false;
|
bool carryFlag=false;
|
||||||
if (reg[Y]>reg[X]){
|
if (reg[Y]>=reg[X]){
|
||||||
//reg[0xF]=1;
|
//reg[0xF]=1;
|
||||||
carryFlag=true;
|
carryFlag=true;
|
||||||
}
|
}
|
||||||
@ -612,13 +627,13 @@ public:
|
|||||||
}break;
|
}break;
|
||||||
case 0x1E:{//The index register I will get the value in VX added to it.
|
case 0x1E:{//The index register I will get the value in VX added to it.
|
||||||
//reg[0xF]=0;
|
//reg[0xF]=0;
|
||||||
bool carryFlag=false;
|
/*bool carryFlag=false;
|
||||||
if (index+reg[X]>=0x1000){
|
if (index+reg[X]>=0x1000){
|
||||||
//reg[0xF]=1;
|
//reg[0xF]=1;
|
||||||
carryFlag=true;
|
carryFlag=true;
|
||||||
}
|
}*/
|
||||||
index+=reg[X];
|
index+=reg[X];
|
||||||
reg[0xF]=carryFlag;
|
//reg[0xF]=carryFlag;
|
||||||
}break;
|
}break;
|
||||||
case 0x0A:{//This instruction “blocks”; it stops executing instructions and waits for key input
|
case 0x0A:{//This instruction “blocks”; it stops executing instructions and waits for key input
|
||||||
for (int i=0;i<keymap.size();i++){
|
for (int i=0;i<keymap.size();i++){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user