2017-06-04 20:38:34 +00:00
|
|
|
#include "stdafx.h"
|
|
|
|
#include "Processor.h"
|
|
|
|
|
|
|
|
EightBit::Processor::Processor(Memory& memory)
|
2017-06-10 11:42:55 +00:00
|
|
|
: m_memory(memory),
|
|
|
|
cycles(0),
|
|
|
|
m_halted(false) {
|
2017-06-05 21:39:15 +00:00
|
|
|
sp.word = 0xffff;
|
|
|
|
pc.word = 0;
|
2017-06-04 20:38:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void EightBit::Processor::reset() {
|
|
|
|
pc.word = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void EightBit::Processor::initialise() {
|
2017-06-05 21:39:15 +00:00
|
|
|
sp.word = 0xffff;
|
2017-06-04 20:38:34 +00:00
|
|
|
reset();
|
|
|
|
}
|
|
|
|
|
2017-06-05 21:39:15 +00:00
|
|
|
void EightBit::Processor::push(uint8_t value) {
|
2017-06-10 11:42:55 +00:00
|
|
|
m_memory.ADDRESS().word = --sp.word;
|
2017-06-05 21:39:15 +00:00
|
|
|
m_memory.reference() = value;
|
|
|
|
}
|
|
|
|
|
2017-06-04 20:38:34 +00:00
|
|
|
void EightBit::Processor::pushWord(register16_t value) {
|
2017-06-05 21:39:15 +00:00
|
|
|
push(value.high);
|
|
|
|
push(value.low);
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t EightBit::Processor::pop() {
|
2017-06-10 11:42:55 +00:00
|
|
|
m_memory.ADDRESS().word = sp.word++;
|
2017-06-05 21:39:15 +00:00
|
|
|
return m_memory.reference();
|
2017-06-04 20:38:34 +00:00
|
|
|
}
|
|
|
|
|
2017-06-07 21:54:55 +00:00
|
|
|
void EightBit::Processor::popWord(register16_t& output) {
|
|
|
|
output.low = pop();
|
|
|
|
output.high = pop();
|
2017-06-04 20:38:34 +00:00
|
|
|
}
|