/*
Copyright (C) 1998 T. Scott Dattalo
This file is part of gpsim.
gpsim 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, or (at your option)
any later version.
gpsim 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 gpsim; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "pic-processor.h"
#include "intcon.h"
#include "uart.h"
#include "ssp.h"
#ifndef __14_BIT_PROCESSORS_H__
#define __14_BIT_PROCESSORS_H__
// forward references
class _14bit_processor;
class PicPortRegister;
class PicTrisRegister;
class PicPortBRegister;
class PicTrisRegister;
class PortBSink;
class IOPIN;
extern instruction *disasm14 (_14bit_processor *cpu,unsigned int inst);
class _14bit_processor : public pic_processor
{
public:
#define EEPROM_SIZE 0x40
#define INTERRUPT_VECTOR 4
#define WDTE 4
unsigned int eeprom_size;
INTCON *intcon;
void interrupt(void);
virtual void por(void);
virtual void create(void);
virtual PROCESSOR_TYPE isa(void){return _14BIT_PROCESSOR_;};
virtual PROCESSOR_TYPE base_isa(void){return _14BIT_PROCESSOR_;};
virtual instruction * disasm (unsigned int address, unsigned int inst)
{
return disasm14(this, inst);
}
// Declare a set of functions that will allow the base class to
// get information about the derived classes. NOTE, the values returned here
// will cause errors if they are used -- the derived classes must define their
// parameters appropriately.
virtual void create_sfr_map(void)=0;
virtual void option_new_bits_6_7(unsigned int)=0;
virtual void create_symbols(void)=0;
virtual void create_config_memory();
// Return the portion of pclath that is used during branching instructions
virtual unsigned int get_pclath_branching_jump(void)
{
return ((pclath->value.get() & 0x18)<<8);
}
// Return the portion of pclath that is used during modify PCL instructions
virtual unsigned int get_pclath_branching_modpcl(void)
{
return((pclath->value.get() & 0x1f)<<8);
}
virtual unsigned int map_fsr_indf ( void )
{
return ( this->fsr->value.get() );
}
virtual unsigned int eeprom_get_size(void) {return 0;};
virtual unsigned int eeprom_get_value(unsigned int address) {return 0;};
virtual void eeprom_put_value(unsigned int value,
unsigned int address)
{return;}
virtual unsigned int program_memory_size(void) const = 0;
virtual unsigned int get_program_memory_at_address(unsigned int address);
_14bit_processor(const char *_name=0, const char *desc=0);
virtual ~_14bit_processor();
};
#define cpu14 ( (_14bit_processor *)cpu)
/***************************************************************************
*
* Include file for: P16C84, P16F84, P16F83, P16CR83, P16CR84
*
* The x84 processors have a 14-bit core, eeprom, and are in an 18-pin
* package. The class taxonomy is:
*
* pic_processor
* |-> 14bit_processor
* |
* |----------\
* |
* |- P16C8x
* |->P16C84
* |->P16F84
* |->P16C83
* |->P16CR83
* |->P16CR84
*
***************************************************************************/
class PortBSink;
class Pic14Bit : public _14bit_processor
{
public:
Pic14Bit(const char *_name=0, const char *desc=0);
virtual ~Pic14Bit();
INTCON_14_PIR intcon_reg;
PicPortRegister *m_porta;
PicTrisRegister *m_trisa;
PicPortBRegister *m_portb;
PicTrisRegister *m_trisb;
virtual PROCESSOR_TYPE isa(void){return _14BIT_PROCESSOR_;};
virtual void create_symbols(void);
virtual void create_sfr_map(void);
virtual void option_new_bits_6_7(unsigned int bits);
virtual bool hasSSP() {return false;}
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1