mirror of https://github.com/bsnes-emu/bsnes.git
49 lines
1.3 KiB
C++
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
|