Cleanup of SEP and REP

This commit is contained in:
Preston Skupinski 2012-01-05 19:49:35 -05:00
parent 0def76f12a
commit 12b352cfa5
1 changed files with 30 additions and 56 deletions

86
cpu.js
View File

@ -19,6 +19,34 @@
var cpu_lib = {
r: {
p: {
Set_p: function(value) {
this.bytes_required = function() { return 2; };
this.execute = function(cpu, bytes) {
// TODO: Figure out exactly how behavior differs in emulation mode.
cpu.cycle_count+=3;
var flags = bytes[0].toString(2),
ops = { 0: function() { cpu.p.n = value; },
1: function() { cpu.p.v = value; },
2: function() { cpu.p.m = value; },
3: function() { cpu.p.x = value; },
4: function() { cpu.p.d = value; },
5: function() { cpu.p.i = value; },
6: function() { cpu.p.z = value; },
7: function() { cpu.p.c = value; }};
// Sometimes it cuts off zeros before hand, so add those zeros back.
while(flags.length<8) {
flags = '0' + flags;
}
for(var i = 0; i < 8; i++) {
if(flags.charAt(i)==='1') {
ops[i]();
}
}
}
},
Flag_set: function(flag, value) {
this.bytes_required = function() { return 1; };
this.execute = function(cpu) {
@ -3305,63 +3333,9 @@ var LDX_direct_page_indexed_y =
var LDX_absolute = new cpu_lib.addressing.Absolute(LDX_const);
// Set bits in the p status register as specified by 1's in the position
// that represents each register.
var SEP = {
bytes_required: function() { return 2; },
execute: function(cpu, bytes) {
// TODO: Figure out exactly how behavior differs in emulation mode.
var SEP = new cpu_lib.r.p.Set_p(1);
cpu.cycle_count+=3;
var flags = bytes[0].toString(2),
ops = { 0: function() { cpu.p.n = 1; }, 1: function() { cpu.p.v = 1; },
2: function() { cpu.p.m = 1; }, 3: function() { cpu.p.x = 1; },
4: function() { cpu.p.d = 1; }, 5: function() { cpu.p.i = 1; },
6: function() { cpu.p.z = 1; },
7: function() { cpu.p.c = 1; }};
// Sometimes it cuts off zeros before hand, so add those zeros back.
while(flags.length<8) {
flags = '0' + flags;
}
for(var i = 0; i < 8; i++) {
if(flags.charAt(i)==='1') {
ops[i]();
}
}
}
};
// Clear bits in the p status register as specified by 1's in the position
// that represents each register.
var REP = {
bytes_required: function() { return 2; },
execute: function(cpu, bytes) {
// TODO: Figure out exactly how behavior differs in emulation mode.
cpu.cycle_count+=3;
var flags = bytes[0].toString(2),
ops = { 0: function() { cpu.p.n = 0; }, 1: function() { cpu.p.v = 0; },
2: function() { cpu.p.m = 0; }, 3: function() { cpu.p.x = 0; },
4: function() { cpu.p.d = 0; }, 5: function() { cpu.p.i = 0; },
6: function() { cpu.p.z = 0; },
7: function() { cpu.p.c = 0; }};
// Sometimes it cuts off zeros before hand, so add those zeros back.
while(flags.length<8) {
flags = '0' + flags;
}
for(var i = 0; i < 8; i++) {
if(flags.charAt(i)==='1') {
ops[i]();
}
}
}
};
var REP = new cpu_lib.r.p.Set_p(0);
var XCE = {
bytes_required: function() { return 1; },