summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sim/ucsim/src/sims/rxk.src/imove.cc10
-rw-r--r--sim/ucsim/src/sims/rxk.src/rmem.cc4
2 files changed, 9 insertions, 5 deletions
diff --git a/sim/ucsim/src/sims/rxk.src/imove.cc b/sim/ucsim/src/sims/rxk.src/imove.cc
index 4a5d5f26a..87cb32eb5 100644
--- a/sim/ucsim/src/sims/rxk.src/imove.cc
+++ b/sim/ucsim/src/sims/rxk.src/imove.cc
@@ -558,10 +558,11 @@ cl_rxk::ld_imn_ss(u16_t src)
int
cl_rxk::ldp_irp_rp(u16_t addr, u16_t src)
{
- t_addr a= ((u32_t)rA << 16) + addr;
+ u32_t rAl= rA & 0xf;
+ t_addr a= ((u32_t)rAl << 16) + addr;
mem->phwrite(a, src&0xff);
addr++;
- a= ((u32_t)rA << 16) + addr; // LDP wraps around 64k page boundary
+ a= ((u32_t)rAl << 16) + addr; // LDP wraps around 64k page boundary
mem->phwrite(a, (src>>8)&0xff);
vc.wr+= 2;
tick(11);
@@ -571,10 +572,11 @@ cl_rxk::ldp_irp_rp(u16_t addr, u16_t src)
int
cl_rxk::ldp_rp_irp(class cl_cell16 &dest, u16_t addr)
{
- t_addr a= ((u32_t)rA >> 16) + addr;
+ u32_t rAl= rA & 0xf;
+ t_addr a= ((u32_t)rAl << 16) + addr;
u8_t l= mem->phread(a);
addr++;
- a= ((u32_t)rA >> 16) + addr;
+ a= ((u32_t)rAl << 16) + addr;
u8_t h= mem->phread(a);
dest.W(h*256+l);
vc.rd+= 2;
diff --git a/sim/ucsim/src/sims/rxk.src/rmem.cc b/sim/ucsim/src/sims/rxk.src/rmem.cc
index cfc8a44df..fde027120 100644
--- a/sim/ucsim/src/sims/rxk.src/rmem.cc
+++ b/sim/ucsim/src/sims/rxk.src/rmem.cc
@@ -181,6 +181,7 @@ cl_ras::set(t_addr addr, t_mem val)
{
err_inv_addr(addr);
dummy->set(val);
+ return;
}
cella[addr].set(val);
}
@@ -193,10 +194,11 @@ cl_ras::set(t_addr addr, t_mem val)
void
cl_ras::phset(t_addr phaddr, t_mem val)
{
- if (phaddr >- chip->get_size())
+ if (phaddr >= chip->get_size())
{
err_inv_addr(phaddr);
dummy->set(val);
+ return;
}
u8_t *slot= (u8_t*)(chip->get_slot(phaddr));
*slot= val;