diff options
| author | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
|---|---|---|
| committer | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
| commit | 268a53de823a6750d6256ee1fb1e7707b4b45740 (patch) | |
| tree | 42c1799a9a82b2f7d9790ee9fe181d72a7274751 /sim/ucsim/stypes.h | |
| download | sdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz | |
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'sim/ucsim/stypes.h')
| -rw-r--r-- | sim/ucsim/stypes.h | 372 |
1 files changed, 372 insertions, 0 deletions
diff --git a/sim/ucsim/stypes.h b/sim/ucsim/stypes.h new file mode 100644 index 0000000..e036a10 --- /dev/null +++ b/sim/ucsim/stypes.h @@ -0,0 +1,372 @@ +/* + * Simulator of microcontrollers (stypes.h) + * + * Copyright (C) 1997,16 Drotos Daniel, Talker Bt. + * + * To contact author send email to drdani@mazsola.iit.uni-miskolc.hu + * + */ + +/* This file is part of microcontroller simulator: ucsim. + +UCSIM 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. + +UCSIM 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 UCSIM; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ +/*@1@*/ + +#ifndef STYPES_HEADER +#define STYPES_HEADER + +#include "ddconfig.h" + +//typedef int8_t TYPE_BYTE; +//typedef uint8_t TYPE_UBYTE; +//typedef int16_t TYPE_WORD; +//typedef uint16_t TYPE_UWORD; +//typedef int32_t TYPE_DWORD; +//typedef uint32_t TYPE_UDWORD; + +typedef unsigned char uchar; +typedef unsigned int uint; +typedef unsigned long ulong; + +typedef signed TYPE_BYTE i8_t; +typedef unsigned TYPE_BYTE u8_t; +typedef signed TYPE_WORD i16_t; +typedef unsigned TYPE_WORD u16_t; +typedef signed TYPE_DWORD i32_t; +typedef unsigned TYPE_DWORD u32_t; +typedef signed TYPE_QWORD i64_t; +typedef unsigned TYPE_QWORD u64_t; + +typedef i64_t t_addr; /* 64 bit max */ +typedef u32_t t_mem; /* 32 bit max */ +typedef i32_t t_smem; /* signed 32 bit memory */ + +#define SPECA SPEC_QWORD +#define SPECM SPEC_DWORD + +#define AI(addr) ((int)(addr)) +#define AU(addr) ((unsigned int)(addr)) +#define AI8(addr) (AI((addr)&0xff)) +#define AU8(addr) (AU((addr)&0xff)) +#define AI16(addr) (AI((addr)&0xffff)) +#define AU16(addr) (AU((addr)&0xffff)) +#define AI32(addr) (AI((addr)&0xffffffff)) +#define AU32(addr) (AU((addr)&0xffffffff)) + +#define MI(v) ((int)(v)) +#define MU(v) ((unsigned int)(v)) +#define MI8(v) (MI((v)&0xff)) +#define MU8(v) (MU((v)&0xff)) +#define MI32(v) (MI((v)&0xffffffff)) +#define MU32(v) (MU((v)&0xffffffff)) + +enum { + max_mem_size= 0x40000000 /* 1 GB */ +}; + +struct id_element +{ + int id; + const char *id_string; +}; + +enum error_type { + err_unknown = 0x01, + err_error = 0x02, + err_warning = 0x04 +}; + +// table of dissassembled instructions +struct dis_entry +{ + /*uint64_t*/long long code, mask; // max 8 byte of code + char branch; + uchar length; + const char *mnemonic; + bool is_call; +}; + +// table entry of SFR and BIT names +struct name_entry +{ + int cpu_type; + t_addr addr; + const char *name; +}; + +enum cpu_type { + CPU_NONE = 0, + + CPU_51 = 0x0001, + CPU_31 = 0x0002, + CPU_52 = 0x0004, + CPU_32 = 0x0008, + CPU_51R = 0x0010, + CPU_89C51R = 0x0020, + CPU_251 = 0x0040, + CPU_DS320 = 0x0080, + CPU_DS390 = 0x0100, + CPU_DS390F = 0x0200, + CPU_C521 = 0x0400, + CPU_517 = 0x0800, + CPU_F380 = 0x1000, + CPU_XC88X = 0x2000, + + CPU_ALL_51 = (CPU_51|CPU_31), + CPU_ALL_52 = (CPU_52|CPU_32|CPU_51R|CPU_89C51R|CPU_251| + CPU_DS320|CPU_DS390|CPU_DS390F| + CPU_C521|CPU_517|CPU_XC88X| + CPU_F380), + CPU_ALL_DS3X0 = (CPU_DS320|CPU_DS390|CPU_DS390F), + + CPU_AVR = 0x0001, + CPU_ALL_AVR = (CPU_AVR), + + CPU_Z80 = 0x0001, + CPU_Z180 = 0x0002, + CPU_LR35902 = 0x0004, + CPU_R2K = 0x0008, + CPU_R3KA = 0x0010, + CPU_EZ80 = 0x0020, + CPU_ALL_Z80 = (CPU_Z80|CPU_Z180|CPU_R2K|CPU_LR35902|CPU_R3KA|CPU_EZ80), + + CPU_XA = 0x0001, + CPU_ALL_XA = (CPU_XA), + + CPU_HC08 = 0x0001, + CPU_HCS08 = 0x0002, + CPU_ALL_HC08 = (CPU_HC08|CPU_HCS08), + + CPU_STM8S = 0x0001, // S and AF family + CPU_STM8AF = 0x0001, + CPU_STM8SAF = 0x0001, + // Devices of S family 0x00 00 00 XX + DEV_STM8S903 = 0x00000001, + DEV_STM8S003 = 0x00000002, + DEV_STM8S005 = 0x00000004, + DEV_STM8S007 = 0x00000008, + DEV_STM8S103 = 0x00000010, + DEV_STM8S105 = 0x00000020, + DEV_STM8S207 = 0x00000040, + DEV_STM8S208 = 0x00000080, + DEV_STM8S = (DEV_STM8S903| + DEV_STM8S003| + DEV_STM8S005| + DEV_STM8S007| + DEV_STM8S103| + DEV_STM8S105| + DEV_STM8S207| + DEV_STM8S208), + // Devices of AF family 0x00 00 0X 00 + DEV_STM8AF52 = 0x00000100, + DEV_STM8AF62_12 = 0x00000200, + DEV_STM8AF62_46 = 0x00000400, + DEV_STM8AF = (DEV_STM8AF52| + DEV_STM8AF62_12| + DEV_STM8AF62_46), + + DEV_STM8SAF = (DEV_STM8S|DEV_STM8AF), + + CPU_STM8L = 0x0002, // AL and L family + // Devices of AL family 0x00 0X 00 00 + DEV_STM8AL3xE = 0x00010000, + DEV_STM8AL3x8 = 0x00020000, + DEV_STM8AL3x346 = 0x00040000, + DEV_STM8AL = (DEV_STM8AL3xE| + DEV_STM8AL3x8| + DEV_STM8AL3x346), + // Devices of L family 0xXX 00 00 00 + DEV_STM8L051 = 0x01000000, + DEV_STM8L052C = 0x02000000, + DEV_STM8L052R = 0x04000000, + DEV_STM8L151x23 = 0x08000000, + DEV_STM8L15x46 = 0x10000000, + DEV_STM8L15x8 = 0x20000000, + DEV_STM8L162 = 0x40000000, + DEV_STM8L = (DEV_STM8L051| + DEV_STM8L052C| + DEV_STM8L052R| + DEV_STM8L151x23| + DEV_STM8L15x46| + DEV_STM8L15x8| + DEV_STM8L162), + + DEV_STM8ALL = (DEV_STM8AL|DEV_STM8L), + + CPU_STM8101 = 0x0004, // L101 family + CPU_STM8L101 = 0x0004, + // Devices of L101 family 0x00 00 X0 00 + DEV_STM8101 = 0x00001000, + DEV_STM8L101 = 0x00001000, + + CPU_ALL_STM8 = (CPU_STM8S|CPU_STM8L|CPU_STM8101), + + CPU_ST7 = 0x0001, + CPU_ALL_ST7 = (CPU_ST7), + + // technology + CPU_CMOS = 0x0001, + CPU_HMOS = 0x0002, + + CPU_PDK13 = 0x0001, + CPU_PDK14 = 0x0002, + CPU_PDK15 = 0x0003, +}; + + +struct cpu_entry +{ + const char *type_str; + enum cpu_type type; + int subtype; + const char *type_help; + const char *sub_help; +}; + +/* Classes of memories, this is index on the list */ +enum mem_class +{ + MEM_ROM= 0, + MEM_XRAM, + MEM_IRAM, + MEM_SFR, + MEM_DUMMY, + MEM_IXRAM, + MEM_TYPES +}; + +#define MEM_SFR_ID cchars("sfr") +#define MEM_XRAM_ID cchars("xram") +#define MEM_IXRAM_ID cchars("ixram") +#define MEM_IRAM_ID cchars("iram") + +// States of simulator +enum sim_state { + SIM_NONE = 0, + SIM_GO = 0x01, // Processor is running + SIM_QUIT = 0x02 // Program must exit +}; + +/* States of CPU */ +enum cpu_state { + stGO = 0, /* Normal state */ + stIDLE = 1, /* Idle mode is active */ + stPD = 2 /* Power Down mode is active */ +}; + +/* Result of instruction simulation */ +enum inst_result { + resGO = 0, /* OK, go on */ + resWDTRESET = 1, /* Reseted by WDT */ + resINTERRUPT = 2, /* Interrupt accepted */ + resSTOP = 100, /* Stop if result greather then this */ + resHALT = 101, /* Serious error, halt CPU */ + resINV_ADDR = 102, /* Invalid indirect address */ + resSTACK_OV = 103, /* Stack overflow */ + resBREAKPOINT = 104, /* Fetch Breakpoint */ + resUSER = 105, /* Stopped by user */ + resINV_INST = 106, /* Invalid instruction */ + resBITADDR = 107, /* Bit address is uninterpretable */ + resERROR = 108, /* Error happened during instruction exec */ + resSTEP = 109, /* Step command done, no more exex needed */ + resSIMIF = 110, /* Stopped by simulated prog itself through sim interface */ + resNOT_DONE = 111, /* Intruction has not simulated */ + resEVENTBREAK = 112, /* Event breakpoint */ +}; + +#define BIT_MASK(bitaddr) (1 << (bitaddr & 0x07)) + + +/* Type of breakpoints */ +enum brk_perm +{ + brkFIX, /* f */ + brkDYNAMIC /* d */ +}; + +enum brk_type +{ + brkFETCH, /* f */ + brkEVENT /* e */ +}; + +enum brk_event +{ + brkNONE, + brkWXRAM, /* wx */ + brkRXRAM, /* rx */ + brkRCODE, /* rc */ + brkWIRAM, /* wi */ + brkRIRAM, /* ri */ + brkWSFR, /* ws */ + brkRSFR, /* rs */ + brkREAD, + brkWRITE, + brkACCESS +}; + +/* Interrupt levels */ +enum intr_levels { +//IT_NO = -1, /* not in interroupt service */ + IT_LOW = 1, /* low level interrupt service */ + IT_HIGH = 2 /* service of high priority interrupt */ +}; + +/* cathegories of hw elements (peripherials) */ +enum hw_cath { + HW_DUMMY = 0x0000, + HW_TIMER = 0x0002, + HW_UART = 0x0004, + HW_PORT = 0x0008, + HW_PCA = 0x0010, + HW_INTERRUPT = 0x0020, + HW_WDT = 0x0040, + HW_SIMIF = 0x0080, + HW_RESET = 0x0100, + HW_CLOCK = 0x0200, + HW_CALC = 0x0400, + HW_FLASH = 0x0800, + HW_CPU = 0x1000 +}; + +// Events that can happen in peripherals +enum hw_event { + EV_OVERFLOW, + EV_PORT_CHANGED, + EV_T2_MODE_CHANGED, + EV_CLK_ON, + EV_CLK_OFF +}; + +// flags of hw units +enum hw_flags { + HWF_NONE = 0, + HWF_INSIDE = 0x0001, + HWF_OUTSIDE = 0x0002, + HWF_MISC = 0x0004 +}; + +/* Letter cases */ +enum letter_case { + case_upper, /* all is upper case */ + case_lower, /* all is lower case */ + case_case /* first letter is upper, others are lower case */ +}; + + +#endif + +/* End of stypes.h */ |
