bsnes/processor/arm/arm.hpp

49 lines
1.3 KiB
C++

#ifndef PROCESSOR_ARM_HPP
#define PROCESSOR_ARM_HPP
namespace Processor {
//ARMv3
//ARMv4TDMI
struct ARM {
enum : unsigned { Byte = 8, Half = 16, Word = 32 };
#include "registers.hpp"
#include "instructions-arm.hpp"
#include "instructions-thumb.hpp"
#include "disassembler.hpp"
virtual void step(unsigned clocks) = 0;
virtual void bus_idle(uint32 addr) = 0;
virtual uint32 bus_read(uint32 addr, uint32 size) = 0;
virtual void bus_write(uint32 addr, uint32 size, uint32 word) = 0;
void power();
void exec();
void idle();
uint32 read(uint32 addr, uint32 size);
uint32 load(uint32 addr, uint32 size);
void write(uint32 addr, uint32 size, uint32 word);
void store(uint32 addr, uint32 size, uint32 word);
void vector(uint32 addr, Processor::Mode mode);
bool condition(uint4 condition);
uint32 bit(uint32 result);
uint32 add(uint32 source, uint32 modify, bool carry);
uint32 sub(uint32 source, uint32 modify, bool carry);
uint32 mul(uint32 product, uint32 multiplicand, uint32 multiplier);
uint32 lsl(uint32 source, uint8 shift);
uint32 lsr(uint32 source, uint8 shift);
uint32 asr(uint32 source, uint8 shift);
uint32 ror(uint32 source, uint8 shift);
uint32 rrx(uint32 source);
void serialize(serializer&);
bool trace;
uintmax_t instructions;
};
}
#endif