Exemplo n.º 1
0
            public void InitTransfer()
            {
                var dataSource       = (ulong)((UseAlternateControlData ? parent.basePointer + 0x200 : parent.basePointer) + 0x10 * channelNumber);
                var controlStructure = new ControlStructure(parent.SystemBus.ReadBytes(dataSource, 0x10));
                var request          = new Request(controlStructure.SourcePointer, controlStructure.DestinationPointer, (int)controlStructure.TransferSize,
                                                   (TransferType)controlStructure.SourceSize, (TransferType)controlStructure.DestinationSize,
                                                   controlStructure.SourceIncrement, controlStructure.DestinationIncrement,
                                                   controlStructure.SourceIncrement != 0, controlStructure.DestinationIncrement != 0);

                parent.engine.IssueCopy(request);

                controlStructure.ControlWord &= ~0x3FF7u; //zero request type and length
                parent.SystemBus.WriteBytes(controlStructure.GetBytes(), dataSource, true);
                ChannelEnabled  = false;
                InterruptStatus = true;
                parent.IRQ.Set();
            }
Exemplo n.º 2
0
Arquivo: UDMA.cs Projeto: rte-se/emul8
            public void InitTransfer()
            {
                var dataSource = (UseAlternateControlData ? parent.basePointer + 0x200 : parent.basePointer) + 0x10 * channelNumber;
                var controlStructure = new ControlStructure(parent.SystemBus.ReadBytes(dataSource, 0x10));
                var request = new Request(controlStructure.SourcePointer, controlStructure.DestinationPointer, (int)controlStructure.TransferSize,
                                  (TransferType)controlStructure.SourceSize, (TransferType)controlStructure.DestinationSize,
                                  (int)controlStructure.SourceIncrement, (int)controlStructure.DestinationIncrement,
                                  controlStructure.SourceIncrement != 0, controlStructure.DestinationIncrement != 0);
                parent.engine.IssueCopy(request);

                controlStructure.ControlWord &= ~0x3FF7u; //zero request type and length
                parent.SystemBus.WriteBytes(controlStructure.GetBytes(), dataSource, true);
                ChannelEnabled = false;
                InterruptStatus = true;
                parent.IRQ.Set();

            }