public bool ExportAssembly(Project project)
    {
        var failReason = project.LogWriterSettings.Validate(fs);

        if (failReason != null)
        {
            logger.Error($"invalid assembly build settings {failReason}");
            return(false);
        }

        var lc = new LogCreator
        {
            Settings = project.LogWriterSettings,
            Data     = new LogCreatorByteSource(project.Data),
        };

        logger.Debug("Building....");
        var result = lc.CreateLog();

        if (!result.Success)
        {
            logger.Error($"Failed to build, error was: {result.OutputStr}");
            return(false);
        }

        logger.Info("Successfully exported assembly output.");
        return(true);
    }
示例#2
0
        private void WriteAssemblyOutput(LogWriterSettings settings, bool showProgressBarUpdates = false)
        {
            var lc = new LogCreator()
            {
                Settings = settings,
                Data     = Project.Data,
            };

            LogCreator.OutputResult result = null;
            DoLongRunningTask(delegate { result = lc.CreateLog(); }, "Exporting assembly source code...");

            ProjectView.OnExportFinished(result);
        }
示例#3
0
        /// <summary>
        /// Exports the conversation at <paramref name="inputFilePath"/> as JSON to <paramref name="outputFilePath"/>.
        /// </summary>
        /// <param name="inputFilePath">
        /// The input file path.
        /// </param>
        /// <param name="outputFilePath">
        /// The output file path.
        /// </param>
        /// <exception cref="ArgumentException">
        /// Thrown when a path is invalid.
        /// </exception>
        /// <exception cref="Exception">
        /// Thrown when something bad happens.
        /// </exception>
        public void ExportConversation(string inputFilePath, string outputFilePath, ConversationEditor editor, LogCreator logCreator)
        {
            var          conversationReader = new ConversationReader(inputFilePath);
            Conversation conversation       = conversationReader.ReadConversation();

            editor.EditConversation(conversation);

            var outputLog = logCreator.CreateLog(conversation);

            LogWriter logWriter = new LogWriter();

            logWriter.WriteToOutput(outputLog, outputFilePath);

            Console.WriteLine("Conversation exported from '{0}' to '{1}'", inputFilePath, outputFilePath);
        }
        public static LogCreatorOutput.OutputResult ExportAssembly(Data inputRom, Action <LogCreator> postInitHook = null)
        {
            var logCreator = new LogCreator
            {
                Data     = new LogCreatorByteSource(inputRom),
                Settings = new LogWriterSettings {
                    OutputToString = true,
                    Structure      = LogWriterSettings.FormatStructure.SingleFile
                }
            };

            postInitHook?.Invoke(logCreator);

            return(logCreator.CreateLog());
        }
示例#5
0
        private bool BuildAssembly(string projectFileName)
        {
            var(project, warning) = new ProjectFileManager().Open(projectFileName);
            if (project == null)
            {
                return(false);
            }

            if (!string.IsNullOrEmpty(warning))
            {
                WriteObject($"ERROR: {warning}");
                return(false);
            }

            WriteDebug($"Loaded project, rom is: {project.AttachedRomFilename}");

            var failReason = project.LogWriterSettings.Validate();

            if (failReason != null)
            {
                WriteObject($"ERROR: invalid assembly build settings {failReason}");
                return(false);
            }

            var lc = new LogCreator()
            {
                Settings = project.LogWriterSettings,
                Data     = project.Data,
            };

            WriteCommandDetail("Building....");
            var result = lc.CreateLog();

            if (!result.Success)
            {
                WriteObject($"Failed to build, error was: {result.OutputStr}");
            }

            return(true);
        }
示例#6
0
        public void TestAFewLines()
        {
            var expectedRaw =
                //          label:       instructions                         ;PC    |rawbytes|ia
                "                        lorom                                ;      |        |      ;  \r\n" +
                "                                                             ;      |        |      ;  \r\n" +
                "                                                             ;      |        |      ;  \r\n" +
                "                        ORG $808000                          ;      |        |      ;  \r\n" +
                "                                                             ;      |        |      ;  \r\n" +
                "           CODE_808000: LDA.W Test_Data,X                    ;808000|BD5B80  |80805B;  \r\n" +
                "                        STA.W $0100,X                        ;808003|9D0001  |800100;  \r\n" +
                "           Test22:      DEX                                  ;808006|CA      |      ;  \r\n" +
                "                        BPL CODE_808000                      ;808007|10F7    |808000;  \r\n" +
                "                                                             ;      |        |      ;  \r\n" +
                "                        Test_Data = $80805B                  ;      |        |      ;  \r\n";

            var expectedOut = ParseAll(expectedRaw);

            var inputData = new Data
            {
                Labels = new ObservableDictionary <int, Label>
                {
                    { 0x808000 + 0x06, new Label {
                          Name = "Test22"
                      } },
                    { 0x808000 + 0x5B, new Label {
                          Name = "Test_Data", Comment = "Pretty cool huh?"
                      } },
                    // the CODE_XXXXXX labels are autogenerated
                },
                RomMapMode = RomMapMode.LoRom,
                RomSpeed   = RomSpeed.FastRom,
                RomBytes   =
                {
                    // --------------------------
                    // highlighting a particular section here
                    // we will use this for unit tests as well.

                    // CODE_808000: LDA.W Test_Data,X
                    new RomByte {
                        Rom = 0xBD, TypeFlag = Data.FlagType.Opcode, MFlag = true, Point = Data.InOutPoint.InPoint, DataBank = 0x80, DirectPage = 0x2100
                    },
                    new RomByte {
                        Rom = 0x5B, TypeFlag = Data.FlagType.Operand, DataBank = 0x80, DirectPage = 0x2100
                    },                                                                                                // Test_Data
                    new RomByte {
                        Rom = 0x80, TypeFlag = Data.FlagType.Operand, DataBank = 0x80, DirectPage = 0x2100
                    },                                                                                                // Test_Data

                    // STA.W $0100,X
                    new RomByte {
                        Rom = 0x9D, TypeFlag = Data.FlagType.Opcode, MFlag = true, DataBank = 0x80, DirectPage = 0x2100
                    },
                    new RomByte {
                        Rom = 0x00, TypeFlag = Data.FlagType.Operand, DataBank = 0x80, DirectPage = 0x2100
                    },
                    new RomByte {
                        Rom = 0x01, TypeFlag = Data.FlagType.Operand, DataBank = 0x80, DirectPage = 0x2100
                    },

                    // DEX
                    new RomByte {
                        Rom = 0xCA, TypeFlag = Data.FlagType.Opcode, MFlag = true, DataBank = 0x80, DirectPage = 0x2100
                    },

                    // BPL CODE_808000
                    new RomByte {
                        Rom = 0x10, TypeFlag = Data.FlagType.Opcode, MFlag = true, Point = Data.InOutPoint.OutPoint, DataBank = 0x80, DirectPage = 0x2100
                    },
                    new RomByte {
                        Rom = 0xF7, TypeFlag = Data.FlagType.Operand, DataBank = 0x80, DirectPage = 0x2100
                    },

                    // ------------------------------------
                }
            };

            var settings = new LogWriterSettings();

            settings.SetDefaults();
            settings.OutputToString = true;
            settings.Structure      = LogCreator.FormatStructure.SingleFile;

            var lc = new LogCreator()
            {
                Data     = inputData,
                Settings = settings,
            };

            var result = lc.CreateLog();

            Assert.True(result.LogCreator != null);
            Assert.True(result.OutputStr != null);
            Assert.True(result.ErrorCount == 0);

            var actualOut = ParseAll(result.OutputStr);

            Assert.Equal(expectedOut.Count, actualOut.Count);

            for (var i = 0; i < expectedOut.Count; ++i)
            {
                Assert.Equal(expectedOut[i], actualOut[i]);
            }

            Assert.True(expectedOut.SequenceEqual(actualOut));
        }