forgot file. Only half way finished.
This commit is contained in:
@@ -70,278 +70,173 @@ extern uint32_t offset_mem;
|
|||||||
|
|
||||||
/*----------------------------- Implementation ----------------------------*/
|
/*----------------------------- Implementation ----------------------------*/
|
||||||
|
|
||||||
/****************************************************************************
|
/*
|
||||||
PARAMETERS:
|
* PARAMETERS:
|
||||||
addr - Emulator memory address to read
|
* addr - Emulator memory address to read
|
||||||
|
*
|
||||||
RETURNS:
|
* RETURNS:
|
||||||
Byte value read from emulator memory.
|
* Byte value read from emulator memory.
|
||||||
|
*
|
||||||
REMARKS:
|
* REMARKS:
|
||||||
Reads a byte value from the emulator memory.
|
* Reads a byte value from the emulator memory.
|
||||||
****************************************************************************/
|
*/
|
||||||
uint8_t X86API rdb(uint32_t addr)
|
inline uint8_t X86API rdb(uint32_t addr)
|
||||||
{
|
{
|
||||||
uint8_t val;
|
uint8_t val;
|
||||||
|
|
||||||
if((addr >= 0xA0000) && (addr <= 0xBFFFF))
|
if ((addr >= 0xA0000) && (addr <= 0xBFFFF))
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_X86EMU_PCI
|
val = *(uint8_t *)(offset_mem + addr);
|
||||||
DPRINTVALHEX("rdb(", addr);
|
dbg("%s: rdb(%x) = %x\r\n", __FUNCTION__, addr, val);
|
||||||
#endif
|
|
||||||
val = *(uint8_t *)(offset_mem+addr);
|
|
||||||
#ifdef DEBUG_X86EMU_PCI
|
|
||||||
DPRINTVALHEX(") = ", val);
|
|
||||||
DPRINT("\r\n");
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
if(addr >= M.mem_size)
|
|
||||||
{
|
|
||||||
DB( { DPRINTVALHEX("mem_ptr: address ", addr);
|
|
||||||
DPRINT(" out of range!\r\n"); } )
|
|
||||||
HALT_SYS();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if 0
|
|
||||||
if(addr < 0x200)
|
|
||||||
{
|
|
||||||
DPRINTVALHEXWORD("", M.x86.R_CS);
|
|
||||||
DPRINTVALHEXWORD(":", M.x86.R_IP);
|
|
||||||
DPRINTVALHEX(" updating int vector ", addr >> 2);
|
|
||||||
DPRINT("\r\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
val = *(uint8_t *)(M.mem_base + addr);
|
|
||||||
}
|
|
||||||
DB(if (DEBUG_MEM_TRACE())
|
DB(if (DEBUG_MEM_TRACE())
|
||||||
{
|
{
|
||||||
DPRINTVALHEXLONG("", addr);
|
dbg("%s: %p 1 -> %x\r\n", __FUNCTION__, addr, val);
|
||||||
DPRINTVALHEXBYTE(" 1 -> ", val);
|
|
||||||
DPRINT("\r\n");
|
|
||||||
} )
|
} )
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/*
|
||||||
PARAMETERS:
|
* PARAMETERS:
|
||||||
addr - Emulator memory address to read
|
* addr - Emulator memory address to read
|
||||||
|
*
|
||||||
RETURNS:
|
* RETURNS:
|
||||||
Word value read from emulator memory.
|
* Word value read from emulator memory.
|
||||||
|
*
|
||||||
REMARKS:
|
* REMARKS:
|
||||||
Reads a word value from the emulator memory.
|
* Reads a word value from the emulator memory.
|
||||||
****************************************************************************/
|
*/
|
||||||
uint16_t X86API rdw(uint32_t addr)
|
inline uint16_t X86API rdw(uint32_t addr)
|
||||||
{
|
{
|
||||||
uint16_t val;
|
uint16_t val;
|
||||||
|
|
||||||
if((addr >= 0xA0000) && (addr <= 0xBFFFF))
|
if ((addr >= 0xA0000) && (addr <= 0xBFFFF))
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_X86EMU_PCI
|
|
||||||
DPRINTVALHEX("rdw(", addr);
|
|
||||||
#endif
|
|
||||||
val = swpw(*(uint16_t *)(offset_mem+addr));
|
val = swpw(*(uint16_t *)(offset_mem+addr));
|
||||||
#ifdef DEBUG_X86EMU_PCI
|
dbg("%s: rdw(%x) = %x\r\n", __FUNCTION__, addr, val);
|
||||||
DPRINTVALHEX(") = ", val);
|
|
||||||
DPRINT("\r\n");
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if 0
|
val = (uint16_t) (* (uint8_t *)(M.mem_base + addr));
|
||||||
if(addr > M.mem_size - 2)
|
|
||||||
{
|
|
||||||
DB( { DPRINTVALHEX("mem_ptr: address ", addr);
|
|
||||||
DPRINT(" out of range!\r\n"); } )
|
|
||||||
HALT_SYS();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if 0
|
|
||||||
if(addr < 0x200)
|
|
||||||
{
|
|
||||||
DPRINTVALHEXWORD("", M.x86.R_CS);
|
|
||||||
DPRINTVALHEXWORD(":", M.x86.R_IP);
|
|
||||||
DPRINTVALHEX(" updating int vector ", addr >> 2);
|
|
||||||
DPRINT("\r\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
val = (uint16_t)(*(uint8_t *)(M.mem_base + addr));
|
|
||||||
val |= (((uint16_t)( *(uint8_t *)(M.mem_base + addr + 1))) << 8);
|
val |= (((uint16_t)( *(uint8_t *)(M.mem_base + addr + 1))) << 8);
|
||||||
// val = *(uint16_t *)(M.mem_base + addr);
|
|
||||||
}
|
}
|
||||||
DB(if (DEBUG_MEM_TRACE())
|
DB(if (DEBUG_MEM_TRACE())
|
||||||
{
|
{
|
||||||
DPRINTVALHEXLONG("", addr);
|
dbg("%s: %p 2 -> %x\r\n", __FUNCTION__, addr, value);
|
||||||
DPRINTVALHEXWORD(" 2 -> ", val);
|
|
||||||
DPRINT("\r\n");
|
|
||||||
} )
|
} )
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/*
|
||||||
PARAMETERS:
|
* PARAMETERS:
|
||||||
addr - Emulator memory address to read
|
* addr - Emulator memory address to read
|
||||||
|
*
|
||||||
RETURNS:
|
* RETURNS:
|
||||||
Long value read from emulator memory.
|
* Long value read from emulator memory.
|
||||||
REMARKS:
|
* REMARKS:
|
||||||
Reads a long value from the emulator memory.
|
* Reads a long value from the emulator memory.
|
||||||
****************************************************************************/
|
*/
|
||||||
uint32_t X86API rdl(uint32_t addr)
|
inline uint32_t X86API rdl(uint32_t addr)
|
||||||
{
|
{
|
||||||
uint32_t val;
|
uint32_t val;
|
||||||
|
|
||||||
if((addr >= 0xA0000) && (addr <= 0xBFFFF))
|
if ((addr >= 0xA0000) && (addr <= 0xBFFFF))
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_X86EMU_PCI
|
val = swpl(*(uint32_t *)(offset_mem + addr));
|
||||||
DPRINTVALHEX("rdl(", addr);
|
dbg("%s: rdl(%x) = %x\r\n", __FUNCTION__, addr, val);
|
||||||
#endif
|
|
||||||
val = swpl(*(uint32_t *)(offset_mem+addr));
|
|
||||||
#ifdef DEBUG_X86EMU_PCI
|
|
||||||
DPRINTVALHEX(") = ", val);
|
|
||||||
DPRINT("\r\n");
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
if(addr > M.mem_size - 4)
|
|
||||||
{
|
|
||||||
DB( { DPRINTVALHEX("mem_ptr: address ", addr);
|
|
||||||
DPRINT(" out of range!\r\n"); } )
|
|
||||||
HALT_SYS();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if 0
|
|
||||||
if(addr < 0x200)
|
|
||||||
{
|
|
||||||
DPRINTVALHEXWORD("", M.x86.R_CS);
|
|
||||||
DPRINTVALHEXWORD(":", M.x86.R_IP);
|
|
||||||
DPRINTVALHEX(" updating int vector ", addr >> 2);
|
|
||||||
DPRINT("\r\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
val = swpl(*(uint32_t *)(M.mem_base + addr));
|
val = swpl(*(uint32_t *)(M.mem_base + addr));
|
||||||
// val = *(uint32_t *)(M.mem_base + addr);
|
|
||||||
}
|
}
|
||||||
DB(if (DEBUG_MEM_TRACE())
|
DB(if (DEBUG_MEM_TRACE())
|
||||||
{
|
{
|
||||||
DPRINTVALHEXLONG("", addr);
|
|
||||||
DPRINTVALHEXLONG(" 4 -> ", val);
|
dbg("%s: %p 4 -> %x\r\n", __FUNCTION__, addr, value);
|
||||||
DPRINT("\r\n");
|
|
||||||
} )
|
} )
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/*
|
||||||
PARAMETERS:
|
* PARAMETERS:
|
||||||
addr - Emulator memory address to read
|
* addr - Emulator memory address to read
|
||||||
val - Value to store
|
* val - Value to store
|
||||||
|
*
|
||||||
REMARKS:
|
* REMARKS:
|
||||||
Writes a byte value to emulator memory.
|
* Writes a byte value to emulator memory.
|
||||||
****************************************************************************/
|
*/
|
||||||
void X86API wrb(uint32_t addr, uint8_t val)
|
inline void X86API wrb(uint32_t addr, uint8_t val)
|
||||||
{
|
{
|
||||||
if((addr >= 0xA0000) && (addr <= 0xBFFFF))
|
if ((addr >= 0xA0000) && (addr <= 0xBFFFF))
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_X86EMU_PCI
|
*(uint8_t *)(offset_mem + addr) = val;
|
||||||
DPRINTVALHEX("wrb(", addr);
|
dbg("%s: wrb(%x) = %x\r\n", __FUNCTION__, addr, val);
|
||||||
DPRINTVALHEX(") = ", val);
|
|
||||||
DPRINT("\r\n");
|
|
||||||
#endif
|
|
||||||
*(uint8_t *)(offset_mem+addr) = val;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(addr >= M.mem_size)
|
if(addr >= M.mem_size)
|
||||||
{
|
{
|
||||||
DB( { DPRINTVALHEX("mem_ptr: address ", addr);
|
DB(
|
||||||
DPRINT(" out of range!\r\n"); } )
|
{
|
||||||
HALT_SYS();
|
dbg("%s: mem_ptr: %p out of range!\r\n", __FUNCTION__, addr);
|
||||||
|
})
|
||||||
|
HALT_SYS();
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
if(addr < 0x200)
|
|
||||||
{
|
|
||||||
DPRINTVALHEXWORD("", M.x86.R_CS);
|
|
||||||
DPRINTVALHEXWORD(":", M.x86.R_IP);
|
|
||||||
DPRINTVALHEX(" updating int vector ", addr >> 2);
|
|
||||||
DPRINT("\r\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
*(uint8_t *)(M.mem_base + addr) = val;
|
*(uint8_t *)(M.mem_base + addr) = val;
|
||||||
}
|
}
|
||||||
DB(if (DEBUG_MEM_TRACE())
|
DB(if (DEBUG_MEM_TRACE())
|
||||||
{
|
{
|
||||||
DPRINTVALHEXLONG("", addr);
|
dbg("%s: %p 1 < %x\r\n", __FUNCTION__, addr, val);
|
||||||
DPRINTVALHEXBYTE(" 1 <- ", val);
|
|
||||||
DPRINT("\r\n");
|
|
||||||
} )
|
} )
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/*
|
||||||
PARAMETERS:
|
* PARAMETERS:
|
||||||
addr - Emulator memory address to read
|
* addr - Emulator memory address to read
|
||||||
val - Value to store
|
* val - Value to store
|
||||||
|
*
|
||||||
REMARKS:
|
* REMARKS:
|
||||||
Writes a word value to emulator memory.
|
* Writes a word value to emulator memory.
|
||||||
****************************************************************************/
|
*/
|
||||||
void X86API wrw(uint32_t addr, uint16_t val)
|
inline void X86API wrw(uint32_t addr, uint16_t val)
|
||||||
{
|
{
|
||||||
if((addr >= 0xA0000) && (addr <= 0xBFFFF))
|
if ((addr >= 0xA0000) && (addr <= 0xBFFFF))
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_X86EMU_PCI
|
dbg("%s: wrw(%x) = %x\r\n", __FUNCTION_, addr, val);
|
||||||
DPRINTVALHEX("wrw(", addr);
|
|
||||||
DPRINTVALHEX(") = ", val);
|
|
||||||
DPRINT("\r\n");
|
|
||||||
#endif
|
|
||||||
*(uint16_t *)(offset_mem+addr) = swpw(val);
|
*(uint16_t *)(offset_mem+addr) = swpw(val);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(addr > M.mem_size - 2)
|
if(addr > M.mem_size - 2)
|
||||||
{
|
{
|
||||||
DB( { DPRINTVALHEX("mem_ptr: address ", addr);
|
DB(
|
||||||
DPRINT(" out of range!\r\n"); } )
|
{
|
||||||
HALT_SYS();
|
dbg("%s: mem_ptr: %p out of range\r\n", __FUNCTION__, addr);
|
||||||
|
})
|
||||||
|
HALT_SYS();
|
||||||
}
|
}
|
||||||
#if 0
|
*(uint8_t *)(M.mem_base + addr) = (uint8_t) val;
|
||||||
if(addr < 0x200)
|
*(uint8_t *)(M.mem_base + addr + 1) = (uint8_t) (val >> 8);
|
||||||
{
|
|
||||||
DPRINTVALHEXWORD("", M.x86.R_CS);
|
|
||||||
DPRINTVALHEXWORD(":", M.x86.R_IP);
|
|
||||||
DPRINTVALHEX(" updating int vector ", addr >> 2);
|
|
||||||
DPRINT("\r\n");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
*(uint8_t *)(M.mem_base + addr) = (uint8_t)val;
|
|
||||||
*(uint8_t *)(M.mem_base + addr + 1) = (uint8_t)(val >> 8);
|
|
||||||
// *(uint16_t *)(M.mem_base + addr) = val;
|
|
||||||
}
|
}
|
||||||
DB(if (DEBUG_MEM_TRACE())
|
DB(if (DEBUG_MEM_TRACE())
|
||||||
{
|
{
|
||||||
DPRINTVALHEXLONG("", addr);
|
dbg("%s: %p 2 <- %x\r\n", __FUNCTION__, addr, val);
|
||||||
DPRINTVALHEXWORD(" 2 <- ", val);
|
|
||||||
DPRINT("\r\n");
|
|
||||||
} )
|
} )
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/*
|
||||||
PARAMETERS:
|
* PARAMETERS:
|
||||||
addr - Emulator memory address to read
|
* addr - Emulator memory address to read
|
||||||
val - Value to store
|
* val - Value to store
|
||||||
|
*
|
||||||
REMARKS:
|
* REMARKS:
|
||||||
Writes a long value to emulator memory.
|
* Writes a long value to emulator memory.
|
||||||
****************************************************************************/
|
*/
|
||||||
void X86API wrl(uint32_t addr, uint32_t val)
|
inline void X86API wrl(uint32_t addr, uint32_t val)
|
||||||
{
|
{
|
||||||
if((addr >= 0xA0000) && (addr <= 0xBFFFF))
|
if ((addr >= 0xA0000) && (addr <= 0xBFFFF))
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_X86EMU_PCI
|
#ifdef DEBUG_X86EMU_PCI
|
||||||
DPRINTVALHEX("wrl(", addr);
|
DPRINTVALHEX("wrl(", addr);
|
||||||
|
|||||||
Reference in New Issue
Block a user