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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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!")); }
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); }
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!")); }