Bug fix: check if vm exists
[avr-sim.git] / Stack.cpp
blobdce586754736a6b113611bba8454878e2b2bfd46
1 #include "Stack.h"
2 #include "Registers.h"
4 namespace avr {
6 Stack::Stack(Bus & bus, MMU & mmu, word mask)
7 : Hardware(bus), mmu(mmu), mask(mask), sp(0) {
10 void Stack::push(unsigned char val) {
11 mmu.writeByte(sp, val);
12 sp--;
13 setSP( sp );
16 unsigned char Stack::pop() {
17 sp++;
18 setSP( sp );
20 return mmu.readByte(sp);
23 void Stack::setSP(word sp) {
24 sp &= mask;
25 spl->set( getSPL() );
26 sph->set( getSPH() );
29 bool Stack::attachReg(const char *name, IORegister *reg) {
30 if( strcmp(name, "sph") == 0 )
31 sph = reg;
32 else if( strcmp(name, "spl") == 0 )
33 spl = reg;
34 else
35 return false;
37 reg->registerHW(this);
38 return true;
41 void Stack::regChanged(IORegister *reg) {
42 if( reg == sph )
43 setSPH( (unsigned char)*sph );
44 else if( reg == spl )
45 setSPL( (unsigned char)*spl );
48 void Stack::step() {