4 #include "AccessViolation.h"
8 MMU::MMU(Register R
[], IORegisters
& regs
,
9 SRam
& sram
, ERam
*eram
/*= 0*/) : R(R
), regs(regs
), sram(sram
), eram(eram
) {
12 byte
MMU::readByte(unsigned int offset
) const {
13 if( offset
< registerSpaceSize
)
16 offset
-= registerSpaceSize
;
17 if( offset
< regs
.size() )
18 return regs
.readByte(offset
);
20 offset
-= regs
.size();
21 if( offset
< sram
.size() )
22 return sram
.readByte(offset
);
24 offset
-= sram
.size();
25 // if( (eram != 0) && (offset < eram->size()) )
26 // return eram->readByte(offset);
28 throw AccessViolation();
31 word
MMU::readWord(unsigned int offset
) const {
32 if( offset
< regs
.size() + registerSpaceSize
)
33 throw AccessViolation();
35 offset
-= regs
.size() + registerSpaceSize
;
36 if( offset
< sram
.size() )
37 return sram
.readByte(offset
);
39 offset
-= sram
.size();
40 // if( (eram != 0) && (offset < eram->size()) )
41 // return eram->readByte(offset);
43 throw AccessViolation();
46 void MMU::writeByte(unsigned int offset
, byte val
) {
47 if( offset
< registerSpaceSize
)
50 offset
-= registerSpaceSize
;
51 if( offset
< regs
.size() )
52 return regs
.writeByte(offset
, val
);
54 offset
-= regs
.size();
55 if( offset
< sram
.size() )
56 return sram
.writeByte(offset
, val
);
58 offset
-= sram
.size();
59 // if( (eram != 0) && (offset < eram->size()) )
60 // return eram->writeByte(offset, val);
62 throw AccessViolation();
65 void MMU::writeWord(unsigned int offset
, word val
) {
66 if( offset
< regs
.size() + registerSpaceSize
)
67 throw AccessViolation();
69 offset
-= regs
.size() + registerSpaceSize
;
70 if( offset
< sram
.size() )
71 return sram
.writeWord(offset
, val
);
73 offset
-= sram
.size();
74 // if( (eram != 0) && (offset < eram->size()) )
75 // return eram->writeByte(offset, val);
77 throw AccessViolation();