/usr/include/gpsim/12bit-processors.h is in gpsim-dev 0.29.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | /*
Copyright (C) 1998 T. Scott Dattalo
This file is part of the libgpsim library of gpsim
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, see
<http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
#include "pic-processor.h"
#ifndef __12_BIT_PROCESSORS_H__
#define __12_BIT_PROCESSORS_H__
// forward references
class _12bit_processor;
class IOPIN;
class OptionTraceType;
extern instruction *disasm12 (pic_processor *cpu,unsigned int address,unsigned int inst);
class _12bit_processor : public pic_processor
{
public:
#define WDTE 4
enum _12BIT_DEFINITIONS
{
PA0 = 1<<5, /* Program page preselect bits (in status) */
PA1 = 1<<6,
PA2 = 1<<7,
RP0 = 1<<5, /* Register page select bits (in fsr) */
RP1 = 1<<6
};
unsigned int pa_bits; /* a CPU dependent bit-mask defining which of the program
* page bits in the status register are significant. */
OPTION_REG *option_reg;
virtual void reset(RESET_TYPE r);
virtual void save_state();
virtual void create_symbols();
#define FILE_REGISTERS 0x100
virtual unsigned int register_memory_size () const { return FILE_REGISTERS;};
virtual void dump_registers();
virtual void tris_instruction(unsigned int tris_register){return;};
virtual void create();
virtual void create_config_memory();
virtual PROCESSOR_TYPE isa(){return _12BIT_PROCESSOR_;};
virtual PROCESSOR_TYPE base_isa(){return _12BIT_PROCESSOR_;};
virtual instruction * disasm (unsigned int address, unsigned int inst)
{
return disasm12(this, address, inst);
}
void interrupt() { return; };
// 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 unsigned int program_memory_size(){ return 3; }; // A bogus value that will cause errors if used
// The size of a program memory bank is 2^11 bytes for the 12-bit core
virtual void create_sfr_map() { return;};
// Return the portion of pclath that is used during branching instructions
// Actually, the 12bit core has no pclath. However, the program counter class doesn't need
// to know that. Thus this virtual function really just returns the code page for the
// 12bit cores.
virtual unsigned int get_pclath_branching_jump()
{
return ((status->value.get() & pa_bits) << 4);
}
// The modify pcl type instructions execute exactly like call instructions
virtual unsigned int get_pclath_branching_modpcl()
{
return ((status->value.get() & pa_bits) << 4);
}
// The valid bits in the FSR register vary across the various 12-bit devices
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 put_option_reg(unsigned int);
virtual void option_new_bits_6_7(unsigned int);
virtual unsigned int config_word_address() const {return 0xfff;};
virtual bool set_config_word(unsigned int address, unsigned int cfg_word);
virtual void enter_sleep();
virtual void exit_sleep();
_12bit_processor(const char *_name=0, const char *desc=0);
virtual ~_12bit_processor();
protected:
OptionTraceType *mOptionTT;
};
#define cpu12 ( (_12bit_processor *)cpu)
#endif
|