From 43a85e01012f45b512714611c04bd0f03b216d76 Mon Sep 17 00:00:00 2001 From: Josh Dersch Date: Tue, 19 Jan 2016 11:10:04 -0800 Subject: [PATCH] Ethernet receive/reset fixed, MazeWar now works with more than 2 players. Ethernet controller receive logic still needs massive cleanup. --- Contralto/AltoSystem.cs | 2 +- Contralto/Disk/games.dsk | Bin 2601648 -> 2601648 bytes Contralto/Disk/gamesb.dsk | Bin 2601648 -> 2601648 bytes Contralto/Disk/tdisk8.dsk | Bin 2601648 -> 2601648 bytes Contralto/IO/EthernetController.cs | 57 ++++++++++++++++++----------- Contralto/IO/HostEthernet.cs | 11 +++--- Contralto/Logging/Log.cs | 5 ++- 7 files changed, 46 insertions(+), 29 deletions(-) diff --git a/Contralto/AltoSystem.cs b/Contralto/AltoSystem.cs index 38ff51f..5380cc7 100644 --- a/Contralto/AltoSystem.cs +++ b/Contralto/AltoSystem.cs @@ -172,7 +172,7 @@ namespace Contralto private void T_Elapsed(object sender, ElapsedEventArgs e) { - System.Console.WriteLine("{0} CPU clocks/sec %{1}. {2} fields/sec", _clocks, ((double)_clocks / 5882353.0) * 100.0, _displayController.Fields); + //System.Console.WriteLine("{0} CPU clocks/sec %{1}. {2} fields/sec", _clocks, ((double)_clocks / 5882353.0) * 100.0, _displayController.Fields); _clocks = 0; _displayController.Fields = 0; } diff --git a/Contralto/Disk/games.dsk b/Contralto/Disk/games.dsk index a2b05df143fd860d6ee947e35a132d1a7becd2fe..a8af94bd79b4d9b706211f2eb2f0799e7721bb38 100644 GIT binary patch delta 26389 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 delta 29438 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 z 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 fnu=>0t~{LF&1NQabtlSpdq2SovoD} zTd=cHD>WpZq4>IUChyNODWsaj#+X8NdZ}+cjg5a9#^=*C{Sfi~=G)eN|I_|H4*Jdy zzU=JYWx2~FxJ-wyNrQ7C-2SMjm~i)}7b@j^JXb7*@!USOr4p{1QOhQdej!|UqMns% zKI%q@QNl73te}iltf7LUby&v+YS_dUwo%6pcCm+j9H4Fv?9ql$$7*Y{)h|fjzxFg`E#T2%%VNC^i=G0yHEP)6r7V z@d|b}N+pKGe<{A4=0A(inOKBe=`=0NI$E~nrXibFuPBtNoYU6oBz_)7zNXG-{)1_RomMTZi!+Aa8W27!W98WXv zx&ZqE;4K$}TAWR$4qIj`YBF^neGA}_^MC5<*WHm4pbtoGqz;mYw2HKbw2riauLi(?H!~`(!f%nuDpa!ScY0a?DzKwc%-2ArGZ67s_G&QMvK>SJd+qG9r4O>TYOz zjIm$h^+dHK(=g7D57*j9MsRS}x`@{uWm|mi6#G0%1C?lGl#CIb7{nywWP(hRf=C1F z{xsjEyDP5VEJxB>6~>yJv6q-{<=kj6w8#{h7K5SvP}Y5av-3|}f7>gv?E7v9un1TJ zbO2`nX94E`=K;%r6~HRs0$>er5pd}V>$@M+G^zO`RBRQ)JIa@B(q(); } public void Reset() @@ -115,7 +117,9 @@ namespace Contralto.IO _incomingPacketLength = 0; _inGone = false; //_packetReady = false; - + + _system.Scheduler.CancelEvent(_fifoReceiveWakeupEvent); + if (_system.CPU != null) { _system.CPU.BlockTask(TaskType.Ethernet); @@ -341,23 +345,20 @@ namespace Contralto.IO /// private void OnHostPacketReceived(MemoryStream data) { - _receiverLock.EnterWriteLock(); - _packetReady = true; - _nextPacket = data; + _receiverLock.EnterWriteLock(); + _nextPackets.Enqueue(data); _receiverLock.ExitWriteLock(); } private void PacketPoll(ulong timeNsec, ulong skewNsec, object context) { _receiverLock.EnterUpgradeableReadLock(); - if (_packetReady) + if (_nextPackets.Count > 0) { - // Schedule the next word of data. - Console.WriteLine("**** hack *****"); - + // Schedule the next word of data. if (_iBusy && _incomingPacket == null) { - _incomingPacket = _nextPacket; + _incomingPacket = _nextPackets.Dequeue(); // Read the packet length (in words) (first word of the packet). Convert to bytes. // @@ -369,7 +370,9 @@ namespace Contralto.IO throw new InvalidOperationException("Invalid 3mbit packet length header."); } - Log.Write(LogComponent.EthernetController, "Accepting incoming packet (length {0}).", _incomingPacketLength); + Log.Write(LogComponent.EthernetPacket, "Accepting incoming packet (length {0}).", _incomingPacketLength); + + LogPacket(_incomingPacketLength, _incomingPacket); // From uCode: // "Interface will generate a data wakeup when the first word of the next @@ -386,16 +389,16 @@ namespace Contralto.IO _fifoReceiveWakeupEvent.TimestampNsec = _fifoReceiveDuration; _system.Scheduler.Schedule(_fifoReceiveWakeupEvent); } - else + else if (!_iBusy) { - // Drop, we're either already busy with a packet or we're not listening right now. - Log.Write(LogComponent.EthernetController, "Dropping incoming packet; controller is currently busy or not active (ibusy {0}, packet {1})", _iBusy, _incomingPacket != null); - } + // Drop, the receiver is not active. + Log.Write(LogComponent.EthernetPacket, "Dropping incoming packet; controller is currently not active."); - _receiverLock.EnterWriteLock(); - _packetReady = false; - _nextPacket = null; - _receiverLock.ExitWriteLock(); + MemoryStream discPacket = _nextPackets.Dequeue(); + int discPacketLength = ((discPacket.ReadByte()) | (discPacket.ReadByte() << 8)) * 2; + LogPacket(discPacketLength, discPacket); + + } } _receiverLock.ExitUpgradeableReadLock(); @@ -414,6 +417,7 @@ namespace Contralto.IO Log.Write(LogComponent.EthernetController, "FIFO callback after reset, abandoning input."); _incomingPacket = null; _incomingPacketLength = 0; + _inGone = false; _receiverLock.ExitUpgradeableReadLock(); return; } @@ -475,6 +479,17 @@ namespace Contralto.IO _receiverLock.ExitUpgradeableReadLock(); } + private void LogPacket(int length, MemoryStream packet) + { + Log.Write(LogComponent.EthernetPacket, + " - Packet src {0}, dest {1}, length {2}", + packet.ReadByte(), packet.ReadByte(), length); + + + // Return to top of packet + packet.Position = 2; + } + private Queue _fifo; // Bits in Status register @@ -502,7 +517,7 @@ namespace Contralto.IO private Event _fifoReceiveWakeupEvent; // Polling (hack) - private ulong _pollPeriod = 23000; + private ulong _pollPeriod = 10000; private Event _pollEvent; private bool _packetReady; @@ -514,8 +529,8 @@ namespace Contralto.IO int _outputIndex; // Incoming data and locking - private MemoryStream _incomingPacket; - private MemoryStream _nextPacket; + private MemoryStream _incomingPacket; + private Queue _nextPackets; private int _incomingPacketLength; private System.Threading.ReaderWriterLockSlim _receiverLock; diff --git a/Contralto/IO/HostEthernet.cs b/Contralto/IO/HostEthernet.cs index 16bc28c..f26812e 100644 --- a/Contralto/IO/HostEthernet.cs +++ b/Contralto/IO/HostEthernet.cs @@ -132,8 +132,8 @@ namespace Contralto.IO // Grab the source and destination host addresses from the packet we're sending // and build 10mbit versions. // - byte destinationHost = packetBytes[0]; - byte sourceHost = packetBytes[1]; + byte destinationHost = packetBytes[3]; + byte sourceHost = packetBytes[2]; Log.Write(LogComponent.HostEthernet, "Sending packet; source {0} destination {1}, length {2} words.", Conversion.ToOctal(sourceHost), @@ -141,7 +141,7 @@ namespace Contralto.IO length); MacAddress destinationMac = new MacAddress((UInt48)(_10mbitMACPrefix | destinationHost)); - MacAddress sourceMac = new MacAddress((UInt48)(_10mbitMACPrefix | sourceHost)); + MacAddress sourceMac = new MacAddress((UInt48)(_10mbitMACPrefix | Configuration.HostAddress)); // Build the outgoing packet; place the source/dest addresses, type field and the raw data. EthernetLayer ethernetLayer = new EthernetLayer @@ -170,7 +170,8 @@ namespace Contralto.IO // Filter out packets intended for the emulator, forward them on, drop everything else. // if ((int)p.Ethernet.EtherType == _3mbitFrameType && - (p.Ethernet.Destination.ToValue() & 0xffffffffff00) == _10mbitMACPrefix ) + (p.Ethernet.Destination.ToValue() & 0xffffffffff00) == _10mbitMACPrefix && + (p.Ethernet.Source.ToValue() & 0xff) != Configuration.HostAddress) // drop packets sent by ourselves { Log.Write(LogComponent.HostEthernet, "Received encapsulated 3mbit packet."); _callback(p.Ethernet.Payload.ToMemoryStream()); @@ -205,7 +206,7 @@ namespace Contralto.IO private void Open(bool promiscuous, int timeout) { - _communicator = _interface.Open(65536, promiscuous ? PacketDeviceOpenAttributes.Promiscuous | PacketDeviceOpenAttributes.NoCaptureLocal : PacketDeviceOpenAttributes.NoCaptureLocal, timeout); + _communicator = _interface.Open(65536, promiscuous ? PacketDeviceOpenAttributes.MaximumResponsiveness | PacketDeviceOpenAttributes.Promiscuous : PacketDeviceOpenAttributes.MaximumResponsiveness, timeout); // Set this to 1 so we'll get packets as soon as they arrive, no buffering. _communicator.SetKernelMinimumBytesToCopy(1); diff --git a/Contralto/Logging/Log.cs b/Contralto/Logging/Log.cs index ca878a4..c409644 100644 --- a/Contralto/Logging/Log.cs +++ b/Contralto/Logging/Log.cs @@ -26,6 +26,7 @@ namespace Contralto.Logging EthernetTask = 0x800, TaskSwitch = 0x1000, HostEthernet = 0x2000, + EthernetPacket = 0x4000, Debug = 0x40000000, All = 0x7fffffff @@ -53,10 +54,10 @@ namespace Contralto.Logging static Log() { // TODO: make configurable - _components = LogComponent.HostEthernet | LogComponent.EthernetController; // LogComponent.DiskController | LogComponent.DiskSectorTask | LogComponent.Debug | LogComponent.CPU; // LogComponent.EthernetController; // | LogComponent.Microcode | LogComponent.Memory | LogComponent.CPU; + _components = LogComponent.EthernetPacket | LogComponent.HostEthernet | LogComponent.EthernetController; // LogComponent.DiskController | LogComponent.DiskSectorTask | LogComponent.Debug | LogComponent.CPU; // LogComponent.EthernetController; // | LogComponent.Microcode | LogComponent.Memory | LogComponent.CPU; _type = LogType.Normal | LogType.Warning | LogType.Error | LogType.Verbose; - _logStream = new StreamWriter("log.txt"); + //_logStream = new StreamWriter("log.txt"); } public static LogComponent LogComponents