8 #include "RuntimeException.h"
12 IORegisters::IORegisters(unsigned int count
) {
14 setEach( regs
.begin(), regs
.end(), (IORegister
*)0 );
17 IORegisters::~IORegisters() {
18 std::for_each( regs
.begin(), regs
.end(), Delete
<IORegister
>() );
21 void IORegisters::addReg( word addr
, IORegister
*reg
) {
25 IORegister
*IORegisters::getIoreg(const std::string
& name
, bool required
) const {
26 std::vector
<IORegister
*>::const_iterator it
;
27 for(it
= regs
.begin(); it
!= regs
.end(); ++it
) {
28 if( ((*it
) != 0) && (*it
)->getName() == name
)
32 if( it
== regs
.end() ) {
36 throw util::RuntimeException(
37 util::format("Unable to find register %s") % name
);
43 void IORegisters::reset() {
44 std::for_each( regs
.begin(), regs
.end(),
45 MethodCall
<IORegister
>(&IORegister::reset
) );
48 unsigned char Register::operator =(unsigned char val
) {
49 unsigned char ret
= this->val
;
51 Trace::instance().register_write(address
, val
);
55 Register::operator unsigned char() const {
56 Trace::instance().register_read(address
, val
);
60 unsigned char IORegister::operator =(unsigned char val
) {
61 unsigned char ret
= Register::operator =(val
);
63 hw
->regChanged( this );
67 void IORegister::operator |=(unsigned char val
) {
70 hw
->regChanged( this );
73 void IORegister::operator &=(unsigned char val
) {
76 hw
->regChanged( this );