/*
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. */
#ifndef __P12X_H__
#define __P12X_H__
#include "12bit-processors.h"
#include "pic-ioports.h"
class P12_I2C_EE;
class GPIO : public PicPortRegister
{
public:
GPIO(const char *port_name,
unsigned int numIopins,
unsigned int enableMask);
void setbit(unsigned int bit_number, bool new_value);
void setPullUp ( bool bNewPU );
private:
bool m_bPU;
};
class P12C508 : public _12bit_processor
{
public:
GPIO *m_gpio;
PicTrisRegister *m_tris;
sfr_register osccal; // %%% FIX ME %%% Nothing's done with this.
virtual PROCESSOR_TYPE isa(){return _P12C508_;};
virtual void create_symbols();
virtual void enter_sleep();
virtual unsigned int program_memory_size() const { return 0x200; };
virtual void create_sfr_map();
virtual void dump_registers();
virtual void tris_instruction(unsigned int tris_register);
virtual void reset(RESET_TYPE r);
P12C508(const char *_name=0, const char *desc=0);
virtual ~P12C508();
static Processor *construct(const char *name);
void create();
virtual void create_iopin_map();
virtual unsigned int fsr_valid_bits()
{
return 0x1f; // Assume only 32 register addresses
}
virtual unsigned int fsr_register_page_bits()
{
return 0; // Assume only one register page.
}
virtual void option_new_bits_6_7(unsigned int);
};
// A 12c509 is like a 12c508
class P12C509 : public P12C508
{
public:
virtual PROCESSOR_TYPE isa(){return _P12C509_;};
virtual unsigned int program_memory_size() const { return 0x400; };
virtual void create_sfr_map();
virtual unsigned int fsr_valid_bits()
{
return 0x3f; // 64 registers in all (some are actually aliased)
}
virtual unsigned int fsr_register_page_bits()
{
return 0x20; // 509 has 2 register banks
}
P12C509(const char *_name=0, const char *desc=0);
static Processor *construct(const char *name);
void create();
};
// A 12CE518 is like a 12c508
class P12CE518 : public P12C508
{
public:
virtual PROCESSOR_TYPE isa(){return _P12CE518_;};
virtual void tris_instruction(unsigned int tris_register);
P12CE518(const char *_name=0, const char *desc=0);
static Processor *construct(const char *name);
void create();
virtual void create_iopin_map();
private:
P12_I2C_EE *m_eeprom;
};
// A 12ce519 is like a 12ce518
class P12CE519 : public P12CE518
{
public:
virtual PROCESSOR_TYPE isa(){return _P12CE519_;};
virtual unsigned int program_memory_size() const { return 0x400; };
virtual void create_sfr_map();
virtual unsigned int fsr_valid_bits()
{
return 0x3f; // 64 registers in all (some are actually aliased)
}
virtual unsigned int fsr_register_page_bits()
{
return 0x20; // 519 has 2 register banks
}
P12CE519(const char *_name=0, const char *desc=0);
static Processor *construct(const char *name);
void create();
};
// A 10F200 is like a 12c508
class P10F200 : public P12C508
{
public:
virtual PROCESSOR_TYPE isa(){return _P10F200_;};
virtual unsigned int program_memory_size() const { return 0x100; };
P10F200(const char *_name=0, const char *desc=0);
virtual ~P10F200();
static Processor *construct(const char *name);
void create();
virtual void create_iopin_map();
};
// A 10F202 is like a 10f200
class P10F202 : public P10F200
{
public:
virtual PROCESSOR_TYPE isa(){return _P10F202_;};
virtual unsigned int program_memory_size() const { return 0x200; };
P10F202(const char *_name=0, const char *desc=0);
static Processor *construct(const char *name);
void create();
};
#endif // __P12X_H__
syntax highlighted by Code2HTML, v. 0.9.1