NE2000 ISA now correctly lacks 32-bit reads and writes.
This commit is contained in:
49
src/ne2000.c
49
src/ne2000.c
@@ -446,6 +446,10 @@ void ne2000_write_cr(ne2000_t *ne2000, uint32_t value)
|
|||||||
if (ne2000->IMR.rdma_inte)
|
if (ne2000->IMR.rdma_inte)
|
||||||
{
|
{
|
||||||
picint(1 << ne2000->base_irq);
|
picint(1 << ne2000->base_irq);
|
||||||
|
if (network_card_current == 1)
|
||||||
|
{
|
||||||
|
picintc(1 << ne2000->base_irq);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -501,7 +505,20 @@ uint32_t ne2000_chipmem_read(ne2000_t *ne2000, uint32_t address, unsigned int io
|
|||||||
|
|
||||||
ne2000_log("out-of-bounds chipmem read, %04X\n", address);
|
ne2000_log("out-of-bounds chipmem read, %04X\n", address);
|
||||||
|
|
||||||
return (0xff);
|
if (network_card_current == 1)
|
||||||
|
{
|
||||||
|
switch(io_len)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
return 0xff;
|
||||||
|
case 2:
|
||||||
|
return 0xffff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (0xff);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ne2000_chipmem_write(ne2000_t *ne2000, uint32_t address, uint32_t value, unsigned io_len)
|
void ne2000_chipmem_write(ne2000_t *ne2000, uint32_t address, uint32_t value, unsigned io_len)
|
||||||
@@ -1708,16 +1725,34 @@ uint32_t bios_mask = 0;
|
|||||||
void ne2000_io_set(uint16_t addr, ne2000_t *ne2000)
|
void ne2000_io_set(uint16_t addr, ne2000_t *ne2000)
|
||||||
{
|
{
|
||||||
old_base_addr = addr;
|
old_base_addr = addr;
|
||||||
io_sethandler(addr, 0x0010, ne2000_readb, ne2000_readw, ne2000_readl, ne2000_writeb, ne2000_writew, ne2000_writel, ne2000);
|
if (network_card_current == 1)
|
||||||
io_sethandler(addr+0x10, 0x0010, ne2000_readb, ne2000_readw, ne2000_readl, ne2000_writeb, ne2000_writew, ne2000_writel, ne2000);
|
{
|
||||||
io_sethandler(addr+0x1f, 0x0001, ne2000_readb, ne2000_readw, ne2000_readl, ne2000_writeb, ne2000_writew, ne2000_writel, ne2000);
|
io_sethandler(addr, 0x0010, ne2000_readb, NULL, NULL, ne2000_writeb, NULL, NULL, ne2000);
|
||||||
|
io_sethandler(addr+0x10, 0x0010, ne2000_readb, ne2000_readw, NULL, ne2000_writeb, ne2000_writew, NULL, ne2000);
|
||||||
|
io_sethandler(addr+0x1f, 0x0001, ne2000_readb, NULL, NULL, ne2000_writeb, NULL, NULL, ne2000);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
io_sethandler(addr, 0x0010, ne2000_readb, ne2000_readw, ne2000_readl, ne2000_writeb, ne2000_writew, ne2000_writel, ne2000);
|
||||||
|
io_sethandler(addr+0x10, 0x0010, ne2000_readb, ne2000_readw, ne2000_readl, ne2000_writeb, ne2000_writew, ne2000_writel, ne2000);
|
||||||
|
io_sethandler(addr+0x1f, 0x0001, ne2000_readb, ne2000_readw, ne2000_readl, ne2000_writeb, ne2000_writew, ne2000_writel, ne2000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ne2000_io_remove(int16_t addr, ne2000_t *ne2000)
|
void ne2000_io_remove(int16_t addr, ne2000_t *ne2000)
|
||||||
{
|
{
|
||||||
io_removehandler(addr, 0x0010, ne2000_readb, ne2000_readw, ne2000_readl, ne2000_writeb, ne2000_writew, ne2000_writel, ne2000);
|
if (network_card_current == 1)
|
||||||
io_removehandler(addr+0x10, 0x0010, ne2000_readb, ne2000_readw, ne2000_readl, ne2000_writeb, ne2000_writew, ne2000_writel, ne2000);
|
{
|
||||||
io_removehandler(addr+0x1f, 0x0001, ne2000_readb, ne2000_readw, ne2000_readl, ne2000_writeb, ne2000_writew, ne2000_writel, ne2000);
|
io_removehandler(addr, 0x0010, ne2000_readb, NULL, NULL, ne2000_writeb, NULL, NULL, ne2000);
|
||||||
|
io_removehandler(addr+0x10, 0x0010, ne2000_readb, ne2000_readw, NULL, ne2000_writeb, ne2000_writew, NULL, ne2000);
|
||||||
|
io_removehandler(addr+0x1f, 0x0001, ne2000_readb, NULL, NULL, ne2000_writeb, NULL, NULL, ne2000);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
io_removehandler(addr, 0x0010, ne2000_readb, ne2000_readw, ne2000_readl, ne2000_writeb, ne2000_writew, ne2000_writel, ne2000);
|
||||||
|
io_removehandler(addr+0x10, 0x0010, ne2000_readb, ne2000_readw, ne2000_readl, ne2000_writeb, ne2000_writew, ne2000_writel, ne2000);
|
||||||
|
io_removehandler(addr+0x1f, 0x0001, ne2000_readb, ne2000_readw, ne2000_readl, ne2000_writeb, ne2000_writew, ne2000_writel, ne2000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t ne2000_pci_read(int func, int addr, void *p)
|
uint8_t ne2000_pci_read(int func, int addr, void *p)
|
||||||
|
|||||||
Reference in New Issue
Block a user