EightBitNet/EightBit/LittleEndianProcessor.cs

72 lines
1.9 KiB
C#
Raw Normal View History

namespace EightBit
{
public abstract class LittleEndianProcessor : Processor
{
protected LittleEndianProcessor(Bus memory)
: base(memory)
{
}
public override ushort PeekWord(ushort address)
{
var low = Bus.Peek(address);
var high = Bus.Peek(++address);
return MakeWord(low, high);
}
public override void PokeWord(ushort address, ushort value)
{
Bus.Poke(address, LowByte(value));
Bus.Poke(++address, HighByte(value));
}
protected override ushort FetchWord()
{
var low = FetchByte();
var high = FetchByte();
return MakeWord(low, high);
}
protected override ushort GetWord()
{
var low = BusRead();
++Bus.Address;
var high = BusRead();
return MakeWord(low, high);
}
protected override ushort GetWordPaged(byte page, byte offset)
{
var low = GetBytePaged(page, offset);
var high = GetBytePaged(page, (byte)(offset + 1));
return MakeWord(low, high);
}
protected override ushort PopWord()
{
var low = Pop();
var high = Pop();
return MakeWord(low, high);
}
protected override void PushWord(ushort value)
{
Push(HighByte(value));
Push(LowByte(value));
}
protected override void SetWord(ushort value)
{
BusWrite(LowByte(value));
++Bus.Address;
BusWrite(HighByte(value));
}
protected override void SetWordPaged(byte page, byte offset, ushort value)
{
SetBytePaged(page, offset, LowByte(value));
SetBytePaged(page, (byte)(offset + 1), HighByte(value));
}
}
}