forgot file. Only half way finished.

This commit is contained in:
Markus Fröschle
2014-01-03 21:04:12 +00:00
parent 47d7e8e965
commit 64b24ba73c

View File

@@ -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"); } ) {
dbg("%s: mem_ptr: %p out of range!\r\n", __FUNCTION__, addr);
})
HALT_SYS(); 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"); } ) {
dbg("%s: mem_ptr: %p out of range\r\n", __FUNCTION__, addr);
})
HALT_SYS(); 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);