1 /* 2 * Simulator of microcontrollers (s51.src/mducl.h) 3 * 4 * Copyright (C) 2016,16 Drotos Daniel, Talker Bt. 5 * 6 * To contact author send email to drdani@mazsola.iit.uni-miskolc.hu 7 * 8 */ 9 10 /* This file is part of microcontroller simulator: ucsim. 11 12 UCSIM is free software; you can redistribute it and/or modify 13 it under the terms of the GNU General Public License as published by 14 the Free Software Foundation; either version 2 of the License, or 15 (at your option) any later version. 16 17 UCSIM is distributed in the hope that it will be useful, 18 but WITHOUT ANY WARRANTY; without even the implied warranty of 19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 GNU General Public License for more details. 21 22 You should have received a copy of the GNU General Public License 23 along with UCSIM; see the file COPYING. If not, write to the Free 24 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 25 02111-1307, USA. */ 26 /*@1@*/ 27 28 #ifndef MDUCL_HEADER 29 #define MDUCL_HEADER 30 31 #include "hwcl.h" 32 33 34 class cl_mdu: public cl_hw 35 { 36 protected: 37 u8_t v[6]; // values written to MDx data regs 38 class cl_memory_cell *regs[6]; // result (MRx in xc88x) 39 class cl_memory_cell *con; // CONTROL register 40 public: 41 cl_mdu(class cl_uc *auc, int aid); 42 43 virtual void op_32udiv16(void); 44 virtual void op_16udiv16(void); 45 virtual void op_16umul16(void); 46 virtual void op_norm(void); 47 virtual void op_lshift(void); 48 dir_right(void)49 virtual bool dir_right(void) { return false; } set_steps(int steps)50 virtual void set_steps(int steps) {} get_steps(void)51 virtual int get_steps(void) { return 0; } set_ovr(bool val)52 virtual void set_ovr(bool val) {} set_err(bool val)53 virtual void set_err(bool val) {} 54 }; 55 56 class cl_mdu517: public cl_mdu 57 { 58 protected: 59 u64_t writes; 60 int nuof_writes; 61 //bool calcing; 62 public: 63 cl_mdu517(class cl_uc *auc, int aid); 64 virtual int init(void); 65 66 virtual t_mem read(class cl_memory_cell *cell); 67 virtual void write(class cl_memory_cell *cell, t_mem *val); 68 virtual t_mem conf_op(cl_memory_cell *cell, t_addr addr, t_mem *val); 69 70 virtual bool dir_right(void); 71 virtual void set_steps(int steps); 72 virtual int get_steps(void); 73 virtual void set_ovr(bool val); 74 virtual void set_err(bool val); 75 }; 76 77 class cl_mdu88x: public cl_mdu 78 { 79 protected: 80 class cl_memory_cell *stat; // STATUS register 81 int ticks; // ticks to count down 82 public: 83 cl_mdu88x(class cl_uc *auc, int aid); 84 virtual int init(void); 85 86 virtual t_mem read(class cl_memory_cell *cell); 87 virtual void write(class cl_memory_cell *cell, t_mem *val); 88 virtual t_mem conf_op(cl_memory_cell *cell, t_addr addr, t_mem *val); 89 90 virtual int tick(int cycles); 91 92 virtual void op_32sdiv16(void); 93 virtual void op_16sdiv16(void); 94 virtual void op_16smul16(void); 95 virtual void op_ashift(void); 96 97 virtual bool dir_right(void); 98 virtual void set_steps(int steps); 99 virtual int get_steps(void); 100 virtual void set_ovr(bool val); 101 virtual void set_err(bool val); 102 virtual void set_bsy(bool val); 103 virtual bool busy(void); 104 }; 105 106 107 #endif 108 109 /* End of s51.src/mducl.h */ 110