2 * Simulator of microcontrollers (uc51r.cc)
4 * Copyright (C) 1999,99 Drotos Daniel, Talker Bt.
6 * To contact author send email to drdani@mazsola.iit.uni-miskolc.hu
10 /* This file is part of microcontroller simulator: ucsim.
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.
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.
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
40 * Making an 8051r CPU object
43 t_uc51r::t_uc51r(int Itype, int Itech, class cl_sim *asim):
44 t_uc52(Itype, Itech, asim)
48 for (i= 0; i < ERAM_SIZE; i++)
55 t_uc51r::mk_hw_elements(void)
59 t_uc52::mk_hw_elements();
60 hws->add(h= new cl_wdt(this, 0x3fff));
66 * Resetting of the microcontroller
68 * Original method is extended with handling of WDT.
81 * Copying ERAM to XRAM and vice versa
83 * This two methods are used by command interpreter to make ERAM and
84 * beginning of XRAM to be equivalent.
88 t_uc51r::eram2xram(void)
92 for (i= 0; i < ERAM_SIZE; i++)
93 set_mem(MEM_XRAM, i, ERAM[i]);
97 t_uc51r::xram2eram(void)
101 for (i= 0; i < ERAM_SIZE; i++)
102 ERAM[i]= get_mem(MEM_XRAM, i);
107 t_uc51r::received(int c)
109 t_mem br= sfr->get(SADDR) | sfr->get(SADEN);
110 int scon= sfr->get(SCON);
112 if ((0 < scon >> 6) &&
115 if (/* Check for individual address */
116 ((sfr->get(SADDR) & sfr->get(SADEN)) == (c & sfr->get(SADEN)))
118 /* Check for broadcast address */
120 sfr->set_bit1(SCON, bmRI);
123 sfr->set_bit1(SCON, bmRI);
128 * 0xe0 1 24 MOVX A,@DPTR
129 *____________________________________________________________________________
134 t_uc51r::inst_movx_a_Sdptr(uchar code)
136 if ((sfr->get(AUXR) & bmEXTRAM) ||
138 acc->write(read_mem(MEM_XRAM,
142 acc->write(ERAM[sfr->read(DPL)]);
149 * 0xe2-0xe3 1 24 MOVX A,@Ri
150 *____________________________________________________________________________
155 t_uc51r::inst_movx_a_Sri(uchar code)
160 cell= iram->get_cell(get_reg(code & 0x01)->read());
162 if (sfr->get(AUXR) & bmEXTRAM)
163 acc->write(read_mem(MEM_XRAM, sfr->read(P2)*256+d));
172 * 0xf0 1 24 MOVX @DPTR,A
173 *____________________________________________________________________________
178 t_uc51r::inst_movx_Sdptr_a(uchar code)
180 if ((sfr->get(AUXR) & bmEXTRAM) ||
182 write_mem(MEM_XRAM, sfr->read(DPH)*256 + sfr->read(DPL), acc->read());
184 ERAM[sfr->read(DPL)]= acc->read();
190 * 0xf2-0xf3 1 24 MOVX @Ri,A
191 *____________________________________________________________________________
196 t_uc51r::inst_movx_Sri_a(uchar code)
201 cell= iram->get_cell(get_reg(code & 0x01)->read());
203 if (sfr->get(AUXR) & bmEXTRAM)
204 write_mem(MEM_XRAM, sfr->read(P2)*256 + d, acc->read());
206 ERAM[d]= acc->read();
212 /* End of s51.src/uc51r.cc */