public void RrWithIyAndOffsetIntoL(string row)
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", row
            });
            bool result = assembler.BuildProgram();

            Assert.AreEqual(result, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length, 4);
            Assert.AreEqual(assembler.AssembledProgramBytes[0], 0xFD);
            Assert.AreEqual(assembler.AssembledProgramBytes[1], 0xCB);
            Assert.AreEqual(assembler.AssembledProgramBytes[2], 0x5D);
            Assert.AreEqual(assembler.AssembledProgramBytes[3], 0x1D);
        }
Beispiel #2
0
        public void EquIsWorkingWithAnotherSymbol()
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", "ELSO = $FA", "SZAM EQU ELSO"
            });
            bool successBuildProgram = assembler.BuildProgram();

            Assert.AreEqual(successBuildProgram, true);
            Assert.AreEqual(assembler.AssembledProgram.SymbolTable.Count == 3, true);
            Assert.AreEqual(assembler.AssembledProgram.SymbolTable["ELSO"].Type == SymbolType.Constant, true);
            Assert.AreEqual(assembler.AssembledProgram.SymbolTable["ELSO"].Value == 0xFA, true);
            Assert.AreEqual(assembler.AssembledProgram.SymbolTable["SZAM"].Type == SymbolType.Constant, true);
            Assert.AreEqual(assembler.AssembledProgram.SymbolTable["SZAM"].Value == 0xFA, true);
        }
        public void LdConstantIntoIndexedAddressWithIxAndExpression(string row)
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", row
            });
            bool result = assembler.BuildProgram();

            Assert.AreEqual(result, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length, 4);
            Assert.AreEqual(assembler.AssembledProgramBytes[0], 0xDD);
            Assert.AreEqual(assembler.AssembledProgramBytes[1], 0x36);
            Assert.AreEqual(assembler.AssembledProgramBytes[2], 0xFF);
            Assert.AreEqual(assembler.AssembledProgramBytes[3], 0xAF);
        }
Beispiel #4
0
        public void ResWithBit2AndIxWithOffset(string row)
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", row
            });
            bool result = assembler.BuildProgram();

            Assert.AreEqual(result, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length, 4);
            Assert.AreEqual(assembler.AssembledProgramBytes[0], 0xDD);
            Assert.AreEqual(assembler.AssembledProgramBytes[1], 0xCB);
            Assert.AreEqual(assembler.AssembledProgramBytes[2], 0x5D);
            Assert.AreEqual(assembler.AssembledProgramBytes[3], 0x96);
        }
        public void DsWithCharacterOperandCouldBeAssembled()
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", "LABEL    DS   5,'A'"
            });
            bool result = assembler.BuildProgram();

            Assert.AreEqual(result, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length == 5, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[0] == 0x41, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[1] == 0x41, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[2] == 0x41, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[3] == 0x41, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[4] == 0x41, true);
        }
        public void DsWithTwoExpressions()
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", "LABEL    DS   (3205-3200),($40+$1)"
            });
            bool result = assembler.BuildProgram();

            Assert.AreEqual(result, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length == 5, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[0] == 0x41, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[1] == 0x41, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[2] == 0x41, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[3] == 0x41, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[4] == 0x41, true);
        }
        public void DsWithOneSimpleOperand()
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", "LABEL    DS   5"
            });
            bool result = assembler.BuildProgram();

            Assert.AreEqual(result, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows.Count == 2, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Label == "LABEL", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Instruction.Mnemonic == "DS", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands.Count == 1, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].Value == "5", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].Info.DataType == OperandType.Decimal, true);
        }
        public void AssemblerInterpretLabelWithUnderScoreAndInstruction(string row)
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                row
            });
            bool successBuildProgram = assembler.BuildProgram();

            Assert.AreEqual(successBuildProgram, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows.Count == 1, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[0].Label == "FGHJKL_1", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[0].Operands.Count == 1, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[0].Operands[0].Info.DataType == OperandType.Word, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[0].Instruction.Mnemonic == "ORG", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[0].Instruction.Type == InstructionType.AssemblerInstruction, true);
        }
Beispiel #9
0
        public void OrgCouldBeAssembledWithLcConstant()
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", "RET", "ORG .LC", "RET"
            });
            bool successBuildProgram = assembler.BuildProgram();

            Assert.AreEqual(successBuildProgram, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows.Count == 4, true);
            Assert.AreEqual(assembler.AssembledProgram.ProgramSections.Count == 2, true);
            Assert.AreEqual(assembler.AssembledProgram.ProgramSections[0].ProgramStartAddress == 0x3000, true);
            Assert.AreEqual(assembler.AssembledProgram.ProgramSections[0].SectionLength == 1, true);
            Assert.AreEqual(assembler.AssembledProgram.ProgramSections[1].ProgramStartAddress == 0x3001, true);
            Assert.AreEqual(assembler.AssembledProgram.ProgramSections[0].SectionLength == 1, true);
        }
Beispiel #10
0
        public void CopyIntoTheU3Ram()
        {
            List <string> inputProgram = new List <string>
            {
                "ORG $3000",
                "LD A,$B0     ;U3 RAM behozatala a 3.lapra",
                "LD ($3),A",
                "OUT ($2),A",
                "LD HL,$3000",
                "LD DE,$C000",
                "LD BC,$14",
                "LDIR          ;Program átmásolása $3000-tól $C000-ra",
                "LD A,$70",
                "LD ($3),A",
                "OUT ($2),A",
                "END"
            };
            var  assembler = new Z80Assembler.Z80Assembler(inputProgram);
            bool result    = assembler.BuildProgram();

            Assert.AreEqual(result, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length, 25);
            Assert.AreEqual(assembler.AssembledProgramBytes[0], 0x3E);
            Assert.AreEqual(assembler.AssembledProgramBytes[1], 0xB0);
            Assert.AreEqual(assembler.AssembledProgramBytes[2], 0x32);
            Assert.AreEqual(assembler.AssembledProgramBytes[3], 0x03);
            Assert.AreEqual(assembler.AssembledProgramBytes[4], 0x00);
            Assert.AreEqual(assembler.AssembledProgramBytes[5], 0xD3);
            Assert.AreEqual(assembler.AssembledProgramBytes[6], 0x02);
            Assert.AreEqual(assembler.AssembledProgramBytes[7], 0x21);
            Assert.AreEqual(assembler.AssembledProgramBytes[8], 0x00);
            Assert.AreEqual(assembler.AssembledProgramBytes[9], 0x30);
            Assert.AreEqual(assembler.AssembledProgramBytes[10], 0x11);
            Assert.AreEqual(assembler.AssembledProgramBytes[11], 0x00);
            Assert.AreEqual(assembler.AssembledProgramBytes[12], 0xC0);
            Assert.AreEqual(assembler.AssembledProgramBytes[13], 0x01);
            Assert.AreEqual(assembler.AssembledProgramBytes[14], 0x14);
            Assert.AreEqual(assembler.AssembledProgramBytes[15], 0x00);
            Assert.AreEqual(assembler.AssembledProgramBytes[16], 0xED);
            Assert.AreEqual(assembler.AssembledProgramBytes[17], 0xB0);
            Assert.AreEqual(assembler.AssembledProgramBytes[18], 0x3E);
            Assert.AreEqual(assembler.AssembledProgramBytes[19], 0x70);
            Assert.AreEqual(assembler.AssembledProgramBytes[20], 0x32);
            Assert.AreEqual(assembler.AssembledProgramBytes[21], 0x03);
            Assert.AreEqual(assembler.AssembledProgramBytes[22], 0x00);
            Assert.AreEqual(assembler.AssembledProgramBytes[23], 0xD3);
            Assert.AreEqual(assembler.AssembledProgramBytes[24], 0x02);
        }
        public void DbWithCharacterCuoldBeAssembled()
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", "SZOVEG DB 'A'"
            });
            bool successBuildProgram = assembler.BuildProgram();

            Assert.AreEqual(successBuildProgram, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows.Count == 2, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Label == "SZOVEG", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands.Count == 1, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].ToString() == "'A'", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].Info.DataType == OperandType.Character, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length == 1, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[0] == 0x41, true);
        }
Beispiel #12
0
        public void WrongPreprocessorInstruction()
        {
            var programlines = new List <string>()
            {
                "# notsupported      programstart       ORG                  $3000",
                "#define       CPUtasitas      CP       A",
                "programstart",
                "CPUtasitas"
            };

            var  assembler = new Z80Assembler.Z80Assembler(programlines);
            bool result    = assembler.BuildProgram();

            Assert.AreEqual(result, false);
            Assert.IsTrue(assembler.StatusMessage.StartsWith("Üres előfeldolgozó utasítás! A '#' jel után nem állhat szóköz!"));
        }
        public void DbWithLiteralAndOneByteWithSpaceInLiteralNotUpperAndByteAsFirst()
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "org $3000", "SZOVEG Db $00,'Ez Egy Literal Space-EL'"
            });
            bool successBuildProgram = assembler.BuildProgram();

            Assert.AreEqual(successBuildProgram, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows.Count == 2, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Label == "SZOVEG", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands.Count == 2, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].ToString() == "$00", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].Info.DataType == OperandType.Byte, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[1].ToString() == "'Ez Egy Literal Space-EL'", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[1].Info.DataType == OperandType.Literal, true);
        }
        public void DbWithLiteralAndOneByteWithSpaceInLiteral()
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", "SZOVEG DB 'EZ EGY LITERAL SPACE-EL',$00"
            });
            bool successBuildProgram = assembler.BuildProgram();

            Assert.AreEqual(successBuildProgram, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows.Count == 2, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Label == "SZOVEG", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands.Count == 2, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].ToString() == "'EZ EGY LITERAL SPACE-EL'", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].Info.DataType == OperandType.Literal, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[1].ToString() == "$00", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[1].Info.DataType == OperandType.Byte, true);
        }
Beispiel #15
0
        public void NotSupportedPreprocessorInstruction()
        {
            var programlines = new List <string>()
            {
                "#notsupported      programstart       ORG                  $3000",
                "#define       CPUtasitas      CP       A",
                "programstart",
                "CPUtasitas"
            };

            var  assembler = new Z80Assembler.Z80Assembler(programlines);
            bool result    = assembler.BuildProgram();

            Assert.AreEqual(result, false);
            Assert.IsTrue(assembler.StatusMessage.StartsWith("Érvénytelen előfeldolgozó utasítás: 'NOTSUPPORTED' Sor:1"));
        }
        public void IncBinWithThreeOperands()
        {
            var includePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            var assembler   = new Z80Assembler.Z80Assembler(new List <string> {
                @"ORG $3000", "ADAT INCBIN  \"testdata\\incbintest.bin\",12,3"
            }, new List <string> {
                includePath
            });
            bool successBuildProgram = assembler.BuildProgram();

            Assert.AreEqual(successBuildProgram, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length == 3, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[0] == 0x0d, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[1] == 0x0e, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[2] == 0x0f, true);
        }
        public void DwWithSimpleWordCouldBeAssembled()
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", "SZOVEG DW $FDA9"
            });
            bool successBuildProgram = assembler.BuildProgram();

            Assert.AreEqual(successBuildProgram, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows.Count == 2, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Label == "SZOVEG", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands.Count == 1, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].ToString() == "$FDA9", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].Info.DataType == OperandType.Word, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length == 2, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[0] == 0xA9, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[1] == 0xFD, true);
        }
        public void IncBinForTheFirstFourBytes()
        {
            var includePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            var assembler   = new Z80Assembler.Z80Assembler(new List <string> {
                @"ORG $3000", "ADAT INCBIN  \"testdata\\incbintest.bin\",0,4"
            }, new List <string> {
                includePath
            });
            bool successBuildProgram = assembler.BuildProgram();

            Assert.AreEqual(successBuildProgram, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length == 4, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[0] == 0x01, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[1] == 0x02, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[2] == 0x03, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[3] == 0x04, true);
        }
Beispiel #19
0
        public void SimpleDefine()
        {
            var programlines = new List <string>()
            {
                "#define programstart ORG $3000",
                "#define CPUtasitas CP A",
                "programstart",
                "CPUtasitas"
            };

            var  assembler = new Z80Assembler.Z80Assembler(programlines);
            bool result    = assembler.BuildProgram();

            Assert.AreEqual(result, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length, 1);
            Assert.AreEqual(assembler.AssembledProgramBytes[0], 0xBF);
        }
Beispiel #20
0
        public void IncludeOneFile()
        {
            List <string> inputProgram = new List <string>
            {
                "    #define TVC",
                "   #ifdef  TVC",
                "   #include testdata\\includeTest.tvcasm",
                "   #else",
                "    #include testdata\\includeSpecci.tvcasm",
                "    #endif"
            };

            var includePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            var assembler   = new Z80Assembler.Z80Assembler(inputProgram, new List <string> {
                includePath
            });
            bool result = assembler.BuildProgram();

            Assert.AreEqual(result, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length, 25);
            Assert.AreEqual(assembler.AssembledProgramBytes[0], 0x3E);
            Assert.AreEqual(assembler.AssembledProgramBytes[1], 0xB0);
            Assert.AreEqual(assembler.AssembledProgramBytes[2], 0x32);
            Assert.AreEqual(assembler.AssembledProgramBytes[3], 0x03);
            Assert.AreEqual(assembler.AssembledProgramBytes[4], 0x00);
            Assert.AreEqual(assembler.AssembledProgramBytes[5], 0xD3);
            Assert.AreEqual(assembler.AssembledProgramBytes[6], 0x02);
            Assert.AreEqual(assembler.AssembledProgramBytes[7], 0x21);
            Assert.AreEqual(assembler.AssembledProgramBytes[8], 0x00);
            Assert.AreEqual(assembler.AssembledProgramBytes[9], 0x30);
            Assert.AreEqual(assembler.AssembledProgramBytes[10], 0x11);
            Assert.AreEqual(assembler.AssembledProgramBytes[11], 0x00);
            Assert.AreEqual(assembler.AssembledProgramBytes[12], 0xC0);
            Assert.AreEqual(assembler.AssembledProgramBytes[13], 0x01);
            Assert.AreEqual(assembler.AssembledProgramBytes[14], 0x14);
            Assert.AreEqual(assembler.AssembledProgramBytes[15], 0x00);
            Assert.AreEqual(assembler.AssembledProgramBytes[16], 0xED);
            Assert.AreEqual(assembler.AssembledProgramBytes[17], 0xB0);
            Assert.AreEqual(assembler.AssembledProgramBytes[18], 0x3E);
            Assert.AreEqual(assembler.AssembledProgramBytes[19], 0x70);
            Assert.AreEqual(assembler.AssembledProgramBytes[20], 0x32);
            Assert.AreEqual(assembler.AssembledProgramBytes[21], 0x03);
            Assert.AreEqual(assembler.AssembledProgramBytes[22], 0x00);
            Assert.AreEqual(assembler.AssembledProgramBytes[23], 0xD3);
            Assert.AreEqual(assembler.AssembledProgramBytes[24], 0x02);
        }
        public void IfnDefWithElseWithEmbeddedIfdefAndElse()
        {
            List <string> inputProgram = new List <string>
            {
                "#define  TVC",
                "#ifndef  TVC",
                "RLCA",
                "RLCA",
                "NOP",
                "#else",
                "#Ifndef    spectrum",
                "#ifdef     TVC",
                "#ifdef     TVC",
                "#ifdef     TVC",
                "           ORG    $7000",
                "           LD     A,$41",
                "           LD     (($3E06+Operand)),A",
                "  Hurok    JP     Hurok",
                "  Operand  EQU    $19+operand2",
                "  Operand2 EQU    $1",
                "#endif",
                "#endif",
                "#endif",
                "#else",
                "LD A,B",
                "call specci",
                "#endif",
                "#endif",
                "           END"
            };

            var  assembler = new Z80Assembler.Z80Assembler(inputProgram);
            bool result    = assembler.BuildProgram();

            Assert.AreEqual(result, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length, 8);
            Assert.AreEqual(assembler.AssembledProgramBytes[0], 0x3E);
            Assert.AreEqual(assembler.AssembledProgramBytes[1], 0x41);
            Assert.AreEqual(assembler.AssembledProgramBytes[2], 0x32);
            Assert.AreEqual(assembler.AssembledProgramBytes[3], 0x20);
            Assert.AreEqual(assembler.AssembledProgramBytes[4], 0x3E);
            Assert.AreEqual(assembler.AssembledProgramBytes[5], 0xC3);
            Assert.AreEqual(assembler.AssembledProgramBytes[6], 0x05);
            Assert.AreEqual(assembler.AssembledProgramBytes[7], 0x70);
        }
        public void DbWithThreeBytes()
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", "HAROMBYTE  DB $01,$02,$03"
            });
            bool successBuildProgram = assembler.BuildProgram();

            Assert.AreEqual(successBuildProgram, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows.Count == 2, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Label == "HAROMBYTE", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands.Count == 3, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].ToString() == "$01", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].Info.DataType == OperandType.Byte, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[1].ToString() == "$02", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[1].Info.DataType == OperandType.Byte, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[2].ToString() == "$03", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[2].Info.DataType == OperandType.Byte, true);
        }
        public void AssemblerInterpretLabelInstructionAndDecimalOperand(string row)
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", row
            });
            bool successBuildProgram = assembler.BuildProgram();

            Assert.AreEqual(successBuildProgram, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows.Count == 2, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Label == "START", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands.Count == 2, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].ToString() == "(HL)", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].Info.DataType == OperandType.Register, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[1].ToString() == "123", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[1].Info.DataType == OperandType.Decimal, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Instruction.Mnemonic == "LD", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Instruction.Type == InstructionType.ProcessorInstruction, true);
        }
        public void DwWithSymbolExpression()
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", "DB 1", "SECONDBYTE DB 2", "DW SECONDBYTE+$10"
            });
            bool successBuildProgram = assembler.BuildProgram();

            Assert.AreEqual(successBuildProgram, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows.Count == 4, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[3].Operands.Count == 1, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[3].Operands[0].ToString() == "SECONDBYTE+$10", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[3].Operands[0].Info.DataType == OperandType.Expression, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length == 4, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[0] == 0x01, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[1] == 0x02, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[2] == 0x11, true);
            Assert.AreEqual(assembler.AssembledProgramBytes[3] == 0x30, true);
        }
Beispiel #25
0
        public void Multiplication2()
        {
            List <string> inputProgram = new List <string>
            {
                "ORG    $3000   ",
                "LD     BC,$332C",
                "XOR    A     ",
                "LD     H,A     ",
                "OR     B     ",
                "JR     Z,$300F     ",
                "XOR    A       ",
                "ADD    A,C       ",
                "JR     NC,$300D       ",
                "INC    H       ",
                "DJNZ   $3009       ",
                "LD     L,A       ",
                "END"
            };

            var  assembler = new Z80Assembler.Z80Assembler(inputProgram);
            bool result    = assembler.BuildProgram();

            Assert.AreEqual(result, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length, 16);
            Assert.AreEqual(assembler.AssembledProgramBytes[0], 0x01);
            Assert.AreEqual(assembler.AssembledProgramBytes[1], 0x2C);
            Assert.AreEqual(assembler.AssembledProgramBytes[2], 0x33);
            Assert.AreEqual(assembler.AssembledProgramBytes[3], 0xAF);
            Assert.AreEqual(assembler.AssembledProgramBytes[4], 0x67);
            Assert.AreEqual(assembler.AssembledProgramBytes[5], 0xB0);
            Assert.AreEqual(assembler.AssembledProgramBytes[6], 0x28);
            Assert.AreEqual(assembler.AssembledProgramBytes[7], 0x07);
            Assert.AreEqual(assembler.AssembledProgramBytes[8], 0xAF);
            Assert.AreEqual(assembler.AssembledProgramBytes[9], 0x81);
            Assert.AreEqual(assembler.AssembledProgramBytes[10], 0x30);
            Assert.AreEqual(assembler.AssembledProgramBytes[11], 0x01);
            Assert.AreEqual(assembler.AssembledProgramBytes[12], 0x24);
            Assert.AreEqual(assembler.AssembledProgramBytes[13], 0x10);
            Assert.AreEqual(assembler.AssembledProgramBytes[14], 0xFA);
            Assert.AreEqual(assembler.AssembledProgramBytes[15], 0x6F);
        }
Beispiel #26
0
        public void IncludeWithWrongPath()
        {
            List <string> inputProgram = new List <string>
            {
                "    #define TVC",
                "   #ifdef  TVC",
                "   #include testdata23\\includeTest.tvcasm",
                "   #else",
                "    #include testdata\\includeSpecci.tvcasm",
                "    #endif"
            };

            var includePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            var assembler   = new Z80Assembler.Z80Assembler(inputProgram, new List <string> {
                includePath
            });
            bool result = assembler.BuildProgram();

            Assert.AreEqual(result, false);
            Assert.IsTrue(assembler.StatusMessage.StartsWith("Az #INCLUDE utasításban megadott file:TESTDATA23\\INCLUDETEST.TVCASM nem található a megadott útvonalak egyikén sem!"));
        }
Beispiel #27
0
        public void WritingIntoTheVideoRam()
        {
            List <string> inputProgram = new List <string>
            {
                "ORG $3000",
                "LD A,$50",
                "LD ($3),A",
                "OUT ($2),A",
                "LD A,$6B",
                "LD ($942A),A",
                "LD A,$70",
                "LD ($3),A",
                "OUT ($2),A",
                "END"
            };
            var  assembler = new Z80Assembler.Z80Assembler(inputProgram);
            bool result    = assembler.BuildProgram();

            Assert.AreEqual(result, true);
            Assert.AreEqual(assembler.AssembledProgramBytes.Length, 19);
            Assert.AreEqual(assembler.AssembledProgramBytes[0], 0x3E);
            Assert.AreEqual(assembler.AssembledProgramBytes[1], 0x50);
            Assert.AreEqual(assembler.AssembledProgramBytes[2], 0x32);
            Assert.AreEqual(assembler.AssembledProgramBytes[3], 0x03);
            Assert.AreEqual(assembler.AssembledProgramBytes[4], 0x00);
            Assert.AreEqual(assembler.AssembledProgramBytes[5], 0xD3);
            Assert.AreEqual(assembler.AssembledProgramBytes[6], 0x02);
            Assert.AreEqual(assembler.AssembledProgramBytes[7], 0x3E);
            Assert.AreEqual(assembler.AssembledProgramBytes[8], 0x6B);
            Assert.AreEqual(assembler.AssembledProgramBytes[9], 0x32);
            Assert.AreEqual(assembler.AssembledProgramBytes[10], 0x2A);
            Assert.AreEqual(assembler.AssembledProgramBytes[11], 0x94);
            Assert.AreEqual(assembler.AssembledProgramBytes[12], 0x3E);
            Assert.AreEqual(assembler.AssembledProgramBytes[13], 0x70);
            Assert.AreEqual(assembler.AssembledProgramBytes[14], 0x32);
            Assert.AreEqual(assembler.AssembledProgramBytes[15], 0x03);
            Assert.AreEqual(assembler.AssembledProgramBytes[16], 0x00);
            Assert.AreEqual(assembler.AssembledProgramBytes[17], 0xD3);
            Assert.AreEqual(assembler.AssembledProgramBytes[18], 0x02);
        }
        public void DbWithThreeBytesAndLiteralAndDecimal_2()
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", "TizenKilencByte  DB $01,$02,$03,\"EGY EGY LITERAL\",123"
            });
            bool successBuildProgram = assembler.BuildProgram();

            Assert.AreEqual(successBuildProgram, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows.Count == 2, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Label == "TIZENKILENCBYTE", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands.Count == 5, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].ToString() == "$01", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].Info.DataType == OperandType.Byte, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[1].ToString() == "$02", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[1].Info.DataType == OperandType.Byte, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[2].ToString() == "$03", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[2].Info.DataType == OperandType.Byte, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[3].ToString() == "\"EGY EGY LITERAL\"", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[3].Info.DataType == OperandType.Literal, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[4].ToString() == "123", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[4].Info.DataType == OperandType.Decimal, true);
        }
        public void DbWithThreeExpression()
        {
            var assembler = new Z80Assembler.Z80Assembler(new List <string> {
                "ORG $3000", "Harombyte  DB high($ABCD),low($ABCD),((123+45)/2)"
            });
            bool successBuildProgram = assembler.BuildProgram();

            Assert.AreEqual(successBuildProgram, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows.Count == 2, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Label == "HAROMBYTE", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands.Count == 3, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].ToString() == "HIGH($ABCD)", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[0].Info.DataType == OperandType.Expression, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[1].ToString() == "LOW($ABCD)", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[1].Info.DataType == OperandType.Expression, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[2].ToString() == "((123+45)/2)", true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].Operands[2].Info.DataType == OperandType.Expression, true);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].InstructionBytes.Count, 3);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].InstructionBytes[0], 0xab);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].InstructionBytes[1], 0xcd);
            Assert.AreEqual(assembler.InterPretedAssemblyRows[1].InstructionBytes[2], (123 + 45) / 2);
        }
Beispiel #30
0
        public void IncludeTheSameFileMoreTimesDoesNotWorks()
        {
            List <string> inputProgram = new List <string>
            {
                "   #include testdata\\includeTest.tvcasm",
                "    #define TVC",
                "   #ifdef  TVC",
                "   #include testdata\\includeTest.tvcasm",
                "   #else",
                "    #include testdata\\includeSpecci.tvcasm",
                "    #endif"
            };

            var includePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            var assembler   = new Z80Assembler.Z80Assembler(inputProgram, new List <string> {
                includePath
            }, "UnitTest.tvcasm");
            bool result = assembler.BuildProgram();

            Assert.AreEqual(result, false);
            Assert.IsTrue(assembler.StatusMessage.StartsWith("Rekurzív file hivatkozás az #INCLUDE utasításban!"));
        }