added cpu_physical_memory_write_rom()
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1833 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
b37837317f
commit
d0ecd2aaf9
@ -857,6 +857,8 @@ void stw_phys(target_phys_addr_t addr, uint32_t val);
|
|||||||
void stl_phys(target_phys_addr_t addr, uint32_t val);
|
void stl_phys(target_phys_addr_t addr, uint32_t val);
|
||||||
void stq_phys(target_phys_addr_t addr, uint64_t val);
|
void stq_phys(target_phys_addr_t addr, uint64_t val);
|
||||||
|
|
||||||
|
void cpu_physical_memory_write_rom(target_phys_addr_t addr,
|
||||||
|
const uint8_t *buf, int len);
|
||||||
int cpu_memory_rw_debug(CPUState *env, target_ulong addr,
|
int cpu_memory_rw_debug(CPUState *env, target_ulong addr,
|
||||||
uint8_t *buf, int len, int is_write);
|
uint8_t *buf, int len, int is_write);
|
||||||
|
|
||||||
|
39
exec.c
39
exec.c
@ -2080,6 +2080,45 @@ void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* used for ROM loading : can write in RAM and ROM */
|
||||||
|
void cpu_physical_memory_write_rom(target_phys_addr_t addr,
|
||||||
|
const uint8_t *buf, int len)
|
||||||
|
{
|
||||||
|
int l;
|
||||||
|
uint8_t *ptr;
|
||||||
|
target_phys_addr_t page;
|
||||||
|
unsigned long pd;
|
||||||
|
PhysPageDesc *p;
|
||||||
|
|
||||||
|
while (len > 0) {
|
||||||
|
page = addr & TARGET_PAGE_MASK;
|
||||||
|
l = (page + TARGET_PAGE_SIZE) - addr;
|
||||||
|
if (l > len)
|
||||||
|
l = len;
|
||||||
|
p = phys_page_find(page >> TARGET_PAGE_BITS);
|
||||||
|
if (!p) {
|
||||||
|
pd = IO_MEM_UNASSIGNED;
|
||||||
|
} else {
|
||||||
|
pd = p->phys_offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((pd & ~TARGET_PAGE_MASK) != IO_MEM_RAM &&
|
||||||
|
(pd & ~TARGET_PAGE_MASK) != IO_MEM_ROM) {
|
||||||
|
/* do nothing */
|
||||||
|
} else {
|
||||||
|
unsigned long addr1;
|
||||||
|
addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
|
||||||
|
/* ROM/RAM case */
|
||||||
|
ptr = phys_ram_base + addr1;
|
||||||
|
memcpy(ptr, buf, l);
|
||||||
|
}
|
||||||
|
len -= l;
|
||||||
|
buf += l;
|
||||||
|
addr += l;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* warning: addr must be aligned */
|
/* warning: addr must be aligned */
|
||||||
uint32_t ldl_phys(target_phys_addr_t addr)
|
uint32_t ldl_phys(target_phys_addr_t addr)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user