private static int GenerateDataStatements(byte[] pokeCode, BasicProgram program, int lineNumber) { const int LineLength = 5; var line = new Line(lineNumber); int lineIndex = 0; foreach (var data in pokeCode) { if (lineIndex == 0) { line.AddToken(Token.DATA); line.AddNumber(data); lineIndex++; } else { line.AddText(","); line.AddNumber(data); if (++lineIndex == LineLength) { line.EndLine(); program.AddLine(line); lineNumber += 10; lineIndex = 0; line = new Line(lineNumber); } } } if (lineIndex > 0) { line.EndLine(); program.AddLine(line); } return(lineNumber); }
private static int GenerateBasic(byte[] pokeCode, BasicProgram program) { int lineNumber = 0; var line = new Line(lineNumber); if (rem) { var ldirCode = new byte[] { 33, 23774 & 0xff, 23774 >> 8 & 0xff, 17, (byte)(startAddress & 0xff), (byte)(startAddress >> 8 & 0xff), 1, (byte)(pokeCode.Length & 0xff), (byte)(pokeCode.Length >> 8 & 0xff), 237, 176, 195, (byte)(startAddress & 0xff), (byte)(startAddress >> 8 & 0xff) }; line.AddToken(Token.REM); foreach (var code in ldirCode) { line.AddCode(code); } foreach (var code in pokeCode) { line.AddCode(code); } line.EndLine(); program.AddLine(line); startAddress = 23760; lineNumber += 10; } lineNumber += 10; if (clear) { line = new Line(lineNumber); line.AddToken(Token.CLEAR); line.AddNumber(clearAddress); line.EndLine(); program.AddLine(line); lineNumber += 10; } if (!rem) { // FOR F=xxxx TO yyyy line = new Line(lineNumber); line.GenerateFor("F", startAddress, pokeCode.Length); line.EndLine(); program.AddLine(line); lineNumber += 10; // READ A: POKE F, A: NEXT F line = new Line(lineNumber); line.AddToken(Token.READ); line.AddText("A:"); line.AddToken(Token.POKE); line.AddText("F,A:"); line.AddToken(Token.NEXT); line.AddText("F"); line.EndLine(); program.AddLine(line); lineNumber += 10; } // LOAD ""CODE xxxx if (loadCode) { line = new Line(lineNumber); line.AddToken(Token.LOAD); line.AddText("", true); line.AddToken(Token.CODE); if (codeAddress > 0) { line.AddNumber(codeAddress); } line.EndLine(); program.AddLine(line); lineNumber += 10; } // RANDOMIZE USR xxxx line = new Line(lineNumber); line.AddToken(Token.RANDOMIZE); line.AddToken(Token.USR); line.AddNumber(usrAddress == 0 ? startAddress : usrAddress); line.EndLine(); program.AddLine(line); lineNumber += 10; if (!rem) { GenerateDataStatements(pokeCode, program, lineNumber); } return(lineNumber); }