/*************************************************************************** * Copyright (C) 2005 by Mark Six * * marksix@xs4all.nl * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include "ksimulator.h" KSimulator::KSimulator(TQObject *parent, const char *name ) : TQObject(parent, name) { m_picoBlaze = new CPicoBlaze() ; m_assembler = new CAssembler() ; m_assembler->setCode( m_picoBlaze->code ) ; m_timer = new TQTimer( this ) ; m_bInterrupt = FALSE ; m_timer->stop() ; m_run = false ; connect( m_timer, TQ_SIGNAL( timeout() ), this, TQ_SLOT( next() ) ) ; } KSimulator::~KSimulator() { delete m_picoBlaze ; delete m_assembler ; } void KSimulator::setMessageList( TDEListView *messageList ) { m_assembler->setMessageList( messageList ) ; } void KSimulator::reset() { m_picoBlaze->Reset() ; emit stepped( m_picoBlaze->GetNextSourceLine() ) ; } void KSimulator::clear() { m_picoBlaze->code->ClearCode() ; m_assembler->clear() ; } void KSimulator::interrupt() { m_bInterrupt = TRUE ; } unsigned int KSimulator::getNextSourceLine() { return m_picoBlaze->GetNextSourceLine() ; } void KSimulator::next() { if ( m_bInterrupt ) { m_bInterrupt = FALSE ; m_picoBlaze->Interrupt() ; } else m_picoBlaze->Next() ; emit stepped( m_picoBlaze->GetNextSourceLine() ) ; } CPicoBlaze * KSimulator::getCpu() { return m_picoBlaze ; } unsigned char KSimulator::getFlags() { unsigned char flags = 0 ; if ( m_picoBlaze->flags.carry ) flags |= CARRY_FLAG ; if ( m_picoBlaze->flags.zero ) flags |= ZERO_FLAG ; if ( m_picoBlaze->flags.interrupt_enable ) flags |= INTERRUPT_FLAG ; return flags ; } void KSimulator::setFlags( unsigned char flags ) { m_picoBlaze->flags.carry = flags & CARRY_FLAG ? TRUE : FALSE ; m_picoBlaze->flags.zero = flags & ZERO_FLAG ? TRUE : FALSE ; m_picoBlaze->flags.interrupt_enable = flags & INTERRUPT_FLAG ? TRUE : FALSE ; } void KSimulator::run() { m_timer->start( 1 ) ; m_run = true ; } void KSimulator::stop() { m_timer->stop() ; m_run = false ; } bool KSimulator::isRunning() { return m_run ; } void KSimulator::getRegisterValues( unsigned char *values ) { int i ; for ( i = 0 ; i < 16 ; i++ ) { values[ i ] = m_picoBlaze->s[ i ] ; } } void KSimulator::setRegisterValues( unsigned char *values ) { int i ; for ( i = 0 ; i < 16 ; i++ ) { m_picoBlaze->s[ i ] = values[ i ] ; } } void KSimulator::getScratchpad( unsigned char * values ) { int i ; for ( i = 0 ; i < SCRATCHPAD_SIZE ; i++ ) values[ i ] = m_picoBlaze->scratch->Get( i ) ; } #include "ksimulator.moc"