2 * avr-sim: An atmel AVR simulator
3 * Copyright (C) 2008 Tom Haber
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 #include "Registers.h"
25 Stack::Stack(Bus
& bus
, MMU
& mmu
, word mask
)
26 : Hardware(bus
), mmu(mmu
), mask(mask
), sp(0) {
29 void Stack::push(unsigned char val
) {
30 mmu
.writeByte(sp
, val
);
35 unsigned char Stack::pop() {
39 return mmu
.readByte(sp
);
42 void Stack::setSP(word sp
) {
49 bool Stack::attachReg(const char *name
, IORegister
*reg
) {
50 if( strcmp(name
, "sph") == 0 )
52 else if( strcmp(name
, "spl") == 0 )
57 reg
->registerHW(this);
61 bool Stack::finishBuild() {
62 return ( sph
!= 0 && spl
!= 0 );
65 void Stack::regChanged(IORegister
*reg
) {
67 setSPH( (unsigned char)*sph
);
69 setSPL( (unsigned char)*spl
);