internal static MediaTarget FromText(string from) { var mediaTarget = new MediaTarget(); mediaTarget.Coordinate = MemoryCoordinate.FromText(from); return(mediaTarget); }
public override void Run(Process scenario, CpuCommandContext context) { var advanceAmountRaw = Amount.ReadFromTarget(scenario, context); var advanceAmount = Int32.Parse(advanceAmountRaw); var currentValue = Target.ReadFromTarget(scenario, context); var currentMediaTarget = MediaTarget.FromText(currentValue); AddressableRegion region; if (currentMediaTarget.Coordinate.DriveId == null) { region = scenario.Memory; } else { region = context.Scenario.Disks[currentMediaTarget.Coordinate.DriveId.Value]; } Console.WriteLine($"Seeking {currentMediaTarget.Coordinate} by {advanceAmount}"); //0:0A0:1A var current = currentMediaTarget.Coordinate; for (int i = 0; i < advanceAmount; i++) { current = region.NextAddress(current); } Console.WriteLine($"Seeked to {current}"); Target.WriteToTarget(scenario, current.ToString(), context); }
public static Target ResolveTarget(string from) { if (from.StartsWith("M") || Char.IsDigit(from[0])) { return(MediaTarget.FromText(from)); } if (from.StartsWith("@")) { return(VariableTarget.FromText(from)); } if (from.StartsWith("KB")) { return(KeyBoardTarget.FromText(from)); } if (from.StartsWith("PRINT")) { return(PrinterTarget.FromText(from)); } if (from.StartsWith("X")) { return(DeRefTarget.FromText(from)); } if (from.StartsWith("`")) { return(LiteralTarget.FromText(from)); } throw new ArgumentException(from); }