mirror of
https://github.com/mre/mos6502.git
synced 2024-11-25 02:33:26 +00:00
Make Address take i32 so relative addresses work.
This commit is contained in:
parent
34cd5edd44
commit
bc1687c247
@ -29,7 +29,7 @@
|
||||
// does make sense to add an address and an "address-difference". (If this
|
||||
// is too annoying to work with we should let it go.)
|
||||
#[deriving(PartialEq, Eq, PartialOrd, Ord, Show)]
|
||||
pub struct AddressDiff(pub u16);
|
||||
pub struct AddressDiff(pub i32);
|
||||
|
||||
#[deriving(PartialEq, Eq, PartialOrd, Ord, Show)]
|
||||
pub struct Address(pub u16);
|
||||
@ -37,7 +37,7 @@ pub struct Address(pub u16);
|
||||
impl Add<AddressDiff, Address> for Address {
|
||||
fn add(&self, &AddressDiff(rhs): &AddressDiff) -> Address {
|
||||
let &Address(lhs) = self;
|
||||
Address(lhs + rhs)
|
||||
Address(((lhs as i32) + rhs) as u16)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -216,12 +216,12 @@ impl AddressingMode {
|
||||
AbsoluteX => {
|
||||
// Use [u8, ..2] from instruction as address, add X
|
||||
// (Output: a 16-bit address)
|
||||
UseAddress(arr_to_addr(arr) + AddressDiff(x as u16))
|
||||
UseAddress(arr_to_addr(arr) + AddressDiff(x as i32))
|
||||
},
|
||||
AbsoluteY => {
|
||||
// Use [u8, ..2] from instruction as address, add Y
|
||||
// (Output: a 16-bit address)
|
||||
UseAddress(arr_to_addr(arr) + AddressDiff(y as u16))
|
||||
UseAddress(arr_to_addr(arr) + AddressDiff(y as i32))
|
||||
},
|
||||
Indirect => {
|
||||
// Use [u8, ..2] from instruction as an address. Interpret the
|
||||
@ -248,7 +248,7 @@ impl AddressingMode {
|
||||
let start = arr[0];
|
||||
let slice = memory.get_slice(Address(start as u16),
|
||||
AddressDiff(2));
|
||||
UseAddress(arr_to_addr(slice) + AddressDiff(y as u16))
|
||||
UseAddress(arr_to_addr(slice) + AddressDiff(y as i32))
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ use log;
|
||||
|
||||
use std;
|
||||
|
||||
use address::{AddressDiff};
|
||||
use address::{Address, AddressDiff};
|
||||
use instruction;
|
||||
use instruction::{DecodedInstr};
|
||||
use memory::Memory;
|
||||
|
@ -118,7 +118,7 @@ pub struct StackPointer(pub u8);
|
||||
impl StackPointer {
|
||||
pub fn to_address(&StackPointer(sp): &StackPointer) -> Address
|
||||
{
|
||||
STACK_ADDRESS_LO + AddressDiff(sp as u16)
|
||||
STACK_ADDRESS_LO + AddressDiff(sp as i32)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user