diff options
author | Determinant <[email protected]> | 2017-11-13 13:10:47 -0500 |
---|---|---|
committer | Determinant <[email protected]> | 2017-11-13 13:10:47 -0500 |
commit | 4c599c84bda48401069a6d46163c6aef972c26a2 (patch) | |
tree | 30b0b5e7baec674df88e4f3b040d01ac27fbe9d4 /src | |
parent | 5d3a46796798da4969d54f226629f245dea49486 (diff) |
...
Diffstat (limited to 'src')
-rw-r--r-- | src/mos6502.rs | 34 | ||||
-rw-r--r-- | src/ppu.rs | 5 |
2 files changed, 20 insertions, 19 deletions
diff --git a/src/mos6502.rs b/src/mos6502.rs index c439700..c98b7cc 100644 --- a/src/mos6502.rs +++ b/src/mos6502.rs @@ -24,22 +24,22 @@ macro_rules! make_optable { macro_rules! make_addrtable { ($x:ident, $t: ty) => (pub const $x: [$t; 0x100] = [ - nil, xin, nil, nil, nil, zpg, zpg, nil, nil, imm, acc, nil, nil, abs, abs, nil, - rel, iny, nil, nil, nil, zpx, zpx, nil, nil, aby, nil, nil, nil, abx, abx, nil, - abs, xin, nil, nil, zpg, zpg, zpg, nil, nil, imm, acc, nil, abs, abs, abs, nil, - rel, iny, nil, nil, nil, zpx, zpx, nil, nil, aby, nil, nil, nil, abx, abx, nil, - nil, xin, nil, nil, nil, zpg, zpg, nil, nil, imm, acc, nil, abs, abs, abs, nil, - rel, iny, nil, nil, nil, zpx, zpx, nil, nil, aby, nil, nil, nil, abx, abx, nil, - nil, xin, nil, nil, nil, zpg, zpg, nil, nil, imm, acc, nil, ind, abs, abs, nil, - rel, iny, nil, nil, nil, zpx, zpx, nil, nil, aby, nil, nil, nil, abx, abx, nil, - nil, xin, nil, nil, zpg, zpg, zpg, nil, nil, nil, nil, nil, abs, abs, abs, nil, - rel, iny, nil, nil, zpx, zpx, zpy, nil, nil, aby, nil, nil, nil, abx, nil, nil, - imm, xin, imm, nil, zpg, zpg, zpg, nil, nil, imm, nil, nil, abs, abs, abs, nil, - rel, iny, nil, nil, zpx, zpx, zpy, nil, nil, aby, nil, nil, abx, abx, aby, nil, - imm, xin, nil, nil, zpg, zpg, zpg, nil, nil, imm, nil, nil, abs, abs, abs, nil, - rel, iny, nil, nil, nil, zpx, zpx, nil, nil, aby, nil, nil, nil, abx, abx, nil, - imm, xin, nil, nil, zpg, zpg, zpg, nil, nil, imm, nil, nil, abs, abs, abs, nil, - rel, iny, nil, nil, nil, zpx, zpx, nil, nil, aby, nil, nil, nil, abx, abx, nil + nil, xin, nil, xin, zpg, zpg, zpg, zpg, nil, imm, acc, imm, abs, abs, abs, abs, + rel, iny, nil, iny, zpx, zpx, zpx, zpx, nil, aby, nil, aby, abx, abx, abx, abx, + abs, xin, nil, xin, zpg, zpg, zpg, zpg, nil, imm, acc, imm, abs, abs, abs, abs, + rel, iny, nil, iny, zpx, zpx, zpx, zpx, nil, aby, nil, aby, abx, abx, abx, abx, + nil, xin, nil, xin, zpg, zpg, zpg, zpg, nil, imm, acc, imm, abs, abs, abs, abs, + rel, iny, nil, iny, zpx, zpx, zpx, zpx, nil, aby, nil, aby, abx, abx, abx, abx, + nil, xin, nil, xin, zpg, zpg, zpg, zpg, nil, imm, acc, imm, ind, abs, abs, abs, + rel, iny, nil, iny, zpx, zpx, zpx, zpx, nil, aby, nil, aby, abx, abx, abx, abx, + imm, xin, imm, xin, zpg, zpg, zpg, zpg, nil, imm, nil, imm, abs, abs, abs, abs, + rel, iny, nil, iny, zpx, zpx, zpy, zpy, nil, aby, nil, aby, abx, abx, aby, aby, + imm, xin, imm, xin, zpg, zpg, zpg, zpg, nil, imm, nil, imm, abs, abs, abs, abs, + rel, iny, nil, iny, zpx, zpx, zpy, zpy, nil, aby, nil, aby, abx, abx, aby, aby, + imm, xin, imm, xin, zpg, zpg, zpg, zpg, nil, imm, nil, imm, abs, abs, abs, abs, + rel, iny, nil, iny, zpx, zpx, zpx, zpx, nil, aby, nil, aby, abx, abx, abx, abx, + imm, xin, imm, xin, zpg, zpg, zpg, zpg, nil, imm, nil, imm, abs, abs, abs, abs, + rel, iny, nil, iny, zpx, zpx, zpx, zpx, nil, aby, nil, aby, abx, abx, abx, abx, ];); } @@ -542,7 +542,7 @@ mod ops { ($f: ident, $from: ident, $to: ident) => (fn $f(cpu: &mut CPU) { let mut status = cpu.status & !(ZERO_FLAG | NEG_FLAG); let res = cpu.$from; - cpu.$to = res; + cpu.$to = res; check_zero!(status, res); check_neg!(status, res); cpu.status = status; @@ -97,6 +97,7 @@ impl<'a> PPU<'a> { false => { self.t = (self.t & 0x7fe0) | (data >> 3); self.x = (data & 0x07) as u8; + assert!(self.x == 0); self.w = true; }, true => { @@ -123,7 +124,7 @@ impl<'a> PPU<'a> { pub fn read_data(&mut self) -> u8 { let data = self.mem.read(self.v); - let res = if self.v < 0x3f00 { + let res = if self.v & 0x3fff < 0x3f00 { let prev = self.buffered_read; self.buffered_read = data; prev @@ -372,7 +373,7 @@ impl<'a> PPU<'a> { } else { 0 } } - #[inline(always)] + #[inline(always)] fn get_sp_pidx(&self, i: usize) -> u8 { if self.get_show_sp() { ((self.sp_bitmap[i][1] & 1) << 1) | (self.sp_bitmap[i][0] & 1) |