/*
Copyright (C) 2000,2001 T. Scott Dattalo, Daniel Schudel, Robert Pearce
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. */
//
// p16x5x
//
// This file supports:
// P16C54
// P16C55
// P16C56
#ifndef __P16X5X_H__
#define __P16X5X_H__
#include "packages.h"
#include "stimuli.h"
#include "12bit-processors.h"
class PicPortRegister;
class PicTrisRegister;
class PicLatchRegister;
class P16C54 : public _12bit_processor
{
public:
PicPortRegister *m_porta;
PicTrisRegister *m_trisa;
PicPortRegister *m_portb;
PicTrisRegister *m_trisb;
#ifdef USE_PIN_MODULE_FOR_TOCKI
PinModule *m_tocki;
#else
PicPortRegister *m_tocki;
PicTrisRegister *m_trist0;
#endif
virtual PROCESSOR_TYPE isa(){return _P16C54_;};
virtual void create_symbols();
virtual unsigned int program_memory_size() const { return 0x200; };
virtual unsigned int register_memory_size() const { return 0x20; };
virtual unsigned int config_word_address() const {return 0xFFF;};
virtual void create_sfr_map();
virtual void option_new_bits_6_7(unsigned int bits) {}
P16C54(const char *_name=0, const char *desc=0);
virtual ~P16C54();
void create();
virtual void create_iopin_map();
static Processor *construct(const char *name);
virtual void tris_instruction(unsigned int tris_register);
virtual unsigned int fsr_valid_bits()
{
return 0x1f; // Only 32 register addresses
}
virtual unsigned int fsr_register_page_bits()
{
return 0; // Only one register page.
}
};
class P16C55 : public P16C54
{
public:
PicPortRegister *m_portc;
PicTrisRegister *m_trisc;
virtual PROCESSOR_TYPE isa(){return _P16C55_;};
virtual void create_symbols();
virtual unsigned int program_memory_size() const { return 0x200; };
virtual unsigned int register_memory_size() const { return 0x20; };
virtual unsigned int config_word_address() const {return 0xFFF;};
virtual void create_sfr_map();
P16C55(const char *_name=0, const char *desc=0);
virtual ~P16C55();
virtual void create();
virtual void create_iopin_map();
static Processor *construct(const char *name);
virtual void tris_instruction(unsigned int tris_register);
};
class P16C56 : public P16C54
{
public:
virtual PROCESSOR_TYPE isa(){return _P16C56_;};
virtual unsigned int program_memory_size() const { return 0x400; };
virtual unsigned int register_memory_size() const { return 0x20; };
virtual unsigned int config_word_address() const {return 0xFFF;};
P16C56(const char *_name=0, const char *desc=0);
static Processor *construct(const char *name);
};
#endif
syntax highlighted by Code2HTML, v. 0.9.1