Ne2k Driver Fixes to Support Running in Windows! (#378)
ne2k fixes to support network card in Windows (compared to qemu implementation) - fix clearing of initial buffer (this appears to be the main fix!) - additional fixes for write logic
This commit is contained in:
parent
a1ffe6ef7f
commit
e3a2ad90b1
10
src/ne2k.js
10
src/ne2k.js
|
@ -125,7 +125,10 @@ function Ne2k(cpu, bus)
|
||||||
this.memory[i << 1] = this.memory[i << 1 | 1] = mac[i];
|
this.memory[i << 1] = this.memory[i << 1 | 1] = mac[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
this.memory[14] = this.memory[15] = 0x57;
|
// the PROM signature of 0x57, 0x57 is also doubled
|
||||||
|
// resulting in setting the 4 bytes at the end, 28, 29, 30 and 31 to 0x57
|
||||||
|
this.memory[14 << 1] = this.memory[14 << 1 | 1] = 0x57;
|
||||||
|
this.memory[15 << 1] = this.memory[15 << 1 | 1] = 0x57;
|
||||||
|
|
||||||
dbg_log("Mac: " + h(mac[0], 2) + ":" +
|
dbg_log("Mac: " + h(mac[0], 2) + ":" +
|
||||||
h(mac[1], 2) + ":" +
|
h(mac[1], 2) + ":" +
|
||||||
|
@ -152,7 +155,7 @@ function Ne2k(cpu, bus)
|
||||||
|
|
||||||
io.register_write(this.port | E8390_CMD, this, function(data_byte)
|
io.register_write(this.port | E8390_CMD, this, function(data_byte)
|
||||||
{
|
{
|
||||||
this.cr = data_byte & ~4;
|
this.cr = data_byte;
|
||||||
dbg_log("Write command: " + h(data_byte, 2) + " newpg=" + (this.cr >> 6) + " txcr=" + h(this.txcr, 2), LOG_NET);
|
dbg_log("Write command: " + h(data_byte, 2) + " newpg=" + (this.cr >> 6) + " txcr=" + h(this.txcr, 2), LOG_NET);
|
||||||
|
|
||||||
if(this.cr & 1)
|
if(this.cr & 1)
|
||||||
|
@ -160,7 +163,7 @@ function Ne2k(cpu, bus)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((data_byte | 0x18) && this.rcnt === 0)
|
if((data_byte & 0x18) && this.rcnt === 0)
|
||||||
{
|
{
|
||||||
this.do_interrupt(ENISR_RDC);
|
this.do_interrupt(ENISR_RDC);
|
||||||
}
|
}
|
||||||
|
@ -171,6 +174,7 @@ function Ne2k(cpu, bus)
|
||||||
var data = this.memory.subarray(start, start + this.tcnt);
|
var data = this.memory.subarray(start, start + this.tcnt);
|
||||||
this.bus.send("net0-send", data);
|
this.bus.send("net0-send", data);
|
||||||
this.bus.send("eth-transmit-end", [data.length]);
|
this.bus.send("eth-transmit-end", [data.length]);
|
||||||
|
this.cr &= ~4;
|
||||||
this.do_interrupt(ENISR_TX);
|
this.do_interrupt(ENISR_TX);
|
||||||
|
|
||||||
dbg_log("Command: Transfer. length=" + h(data.byteLength), LOG_NET);
|
dbg_log("Command: Transfer. length=" + h(data.byteLength), LOG_NET);
|
||||||
|
|
Loading…
Reference in a new issue