diff --git a/source2/Compiler/Cosmos.Compiler.DebugStub/Cosmos.Debug.DebugStub.csproj b/source2/Compiler/Cosmos.Compiler.DebugStub/Cosmos.Debug.DebugStub.csproj
index 226be5672..92b38a0f0 100644
--- a/source2/Compiler/Cosmos.Compiler.DebugStub/Cosmos.Debug.DebugStub.csproj
+++ b/source2/Compiler/Cosmos.Compiler.DebugStub/Cosmos.Debug.DebugStub.csproj
@@ -75,6 +75,11 @@
+
+ True
+ True
+ Screen.xs
+
True
True
@@ -108,6 +113,7 @@
CosmosXSharpGenerator
+ Screen.cs
CosmosXSharpGenerator
diff --git a/source2/Compiler/Cosmos.Compiler.DebugStub/Old/Init.cs b/source2/Compiler/Cosmos.Compiler.DebugStub/Old/Init.cs
index 1af1e97ca..03bfc58ec 100644
--- a/source2/Compiler/Cosmos.Compiler.DebugStub/Old/Init.cs
+++ b/source2/Compiler/Cosmos.Compiler.DebugStub/Old/Init.cs
@@ -26,11 +26,11 @@ namespace Cosmos.Debug.DebugStub {
// Called before Kernel runs. Inits debug stub, etc
public class Init : CodeBlock {
public override void Assemble() {
- Call();
+ Call("DebugStub_Cls");
Call();
Call();
Call();
- Call();
+ Call("DebugStub_Cls");
}
}
diff --git a/source2/Compiler/Cosmos.Compiler.DebugStub/Old/Screen.cs b/source2/Compiler/Cosmos.Compiler.DebugStub/Old/Screen.cs
index 91267e0f4..5148430af 100644
--- a/source2/Compiler/Cosmos.Compiler.DebugStub/Old/Screen.cs
+++ b/source2/Compiler/Cosmos.Compiler.DebugStub/Old/Screen.cs
@@ -11,7 +11,7 @@ namespace Cosmos.Debug.DebugStub {
public partial class DebugStub : CodeGroup {
protected const uint VidBase = 0xB8000;
- public class Cls : CodeBlock {
+ public class Cls2 : CodeBlock {
public override void Assemble() {
ESI = VidBase;
Label = "DebugStub_Cls_More";
diff --git a/source2/Compiler/Cosmos.Compiler.DebugStub/Screen.xs b/source2/Compiler/Cosmos.Compiler.DebugStub/Screen.xs
index 6a01d99bc..111d66935 100644
--- a/source2/Compiler/Cosmos.Compiler.DebugStub/Screen.xs
+++ b/source2/Compiler/Cosmos.Compiler.DebugStub/Screen.xs
@@ -1,6 +1,6 @@
Group DebugStub
-procedure Cls2 {
+procedure Cls {
# VidBase
ESI = $B8000
@@ -17,7 +17,7 @@ BeginLoop:
# End of Video Area
# VidBase + 25 * 80 * 2 = B8FA0
- ESI < $B8FA0
+ #ESI ? $B8FA0
#if < goto BeginLoop
- # If (ESI < $B8FA0) goto .BeginLoop
+ If (ESI < $B8FA0) goto BeginLoop
}
\ No newline at end of file
diff --git a/source2/Compiler/Cosmos.XSharp/Parser.cs b/source2/Compiler/Cosmos.XSharp/Parser.cs
index c9a78797a..cb5288c39 100644
--- a/source2/Compiler/Cosmos.XSharp/Parser.cs
+++ b/source2/Compiler/Cosmos.XSharp/Parser.cs
@@ -20,7 +20,7 @@ namespace Cosmos.Compiler.XSharp {
public static string[] mKeywords = (
"CALL"
+ ",END,EXIT"
- + ",GOTO, GROUP"
+ + ",GOTO,GROUP"
+ ",IF,INTERRUPTHANDLER"
+ ",JUMP"
+ ",POPALL,PUSHALL,PROCEDURE,PORT"
@@ -146,6 +146,8 @@ namespace Cosmos.Compiler.XSharp {
xToken.Type = TokenType.LessThan;
} else if (xString == ">") {
xToken.Type = TokenType.GreaterThan;
+ } else if (xString == "?") {
+ xToken.Type = TokenType.Question;
}
#endregion
}
diff --git a/source2/Compiler/Cosmos.XSharp/Token.cs b/source2/Compiler/Cosmos.XSharp/Token.cs
index eeefc6905..915efafa7 100644
--- a/source2/Compiler/Cosmos.XSharp/Token.cs
+++ b/source2/Compiler/Cosmos.XSharp/Token.cs
@@ -12,7 +12,7 @@ namespace Cosmos.Compiler.XSharp {
// Values
, ValueInt
// Symbols
- , Equals, BracketLeft, BracketRight, Plus, Minus, Colon, Dollar, CurlyLeft, CurlyRight, Dot, Comma, LessThan, GreaterThan
+ , Equals, BracketLeft, BracketRight, Plus, Minus, Colon, Dollar, CurlyLeft, CurlyRight, Dot, Comma, LessThan, GreaterThan, Question
//
, WhiteSpace
// For now used during scanning while user is typing, but in future could be user methods we have to find etc
diff --git a/source2/Compiler/Cosmos.XSharp/TokenPatterns.cs b/source2/Compiler/Cosmos.XSharp/TokenPatterns.cs
index 075d9186f..e7200915e 100644
--- a/source2/Compiler/Cosmos.XSharp/TokenPatterns.cs
+++ b/source2/Compiler/Cosmos.XSharp/TokenPatterns.cs
@@ -88,8 +88,22 @@ namespace Cosmos.Compiler.XSharp {
}
);
- // TODO - Combine these to code to scan
- AddPattern("_REG < 123",
+ AddPattern(new string[] { "if < goto .._ABC", "if < goto ._ABC", "if < goto _ABC" },
+ delegate(TokenList aTokens, ref List rCode) {
+ string xLabel = GetLabel(aTokens, 3);
+ rCode.Add("new ConditionalJump {{ Condition = ConditionalTestEnum.LessThan, DestinationLabel = " + Quoted(xLabel) + " }};");
+ }
+ );
+
+ AddPattern(new string[] { "if (_REG < 123) goto .._ABC", "if (_REG < 123) goto ._ABC", "if (_REG < 123) goto _ABC" },
+ delegate(TokenList aTokens, ref List rCode) {
+ rCode.Add("new Compare {{ DestinationReg = RegistersEnum.{2}, SourceValue = {4} }};");
+ string xLabel = GetLabel(aTokens, 7);
+ rCode.Add("new ConditionalJump {{ Condition = ConditionalTestEnum.LessThan, DestinationLabel = " + Quoted(xLabel) + " }};");
+ }
+ );
+
+ AddPattern("_REG ? 123",
"new Compare {{ DestinationReg = RegistersEnum.{0}, SourceValue = {2} }};"
);
diff --git a/source2/Users/Kudzu/Kudzu-Notes.html b/source2/Users/Kudzu/Kudzu-Notes.html
index 2f1a84ad9..adec90340 100644
--- a/source2/Users/Kudzu/Kudzu-Notes.html
+++ b/source2/Users/Kudzu/Kudzu-Notes.html
@@ -34,7 +34,10 @@
To Do
+
+ All x86 ops have a 1:1 X# op, but there can be more X# ops which have mult x86
+ ops
diff --git a/source2/VSIP/Cosmos.VS.XSharp/FileGenerator.cs b/source2/VSIP/Cosmos.VS.XSharp/FileGenerator.cs
index c3b28cdaa..ba9d571ce 100644
--- a/source2/VSIP/Cosmos.VS.XSharp/FileGenerator.cs
+++ b/source2/VSIP/Cosmos.VS.XSharp/FileGenerator.cs
@@ -32,10 +32,11 @@ namespace Cosmos.VS.XSharp {
}
private static string DoGenerate(string aInputFileName, string aInputFileContents, string aDefaultNamespace) {
+ string xClassName = Path.GetFileNameWithoutExtension(aInputFileName);
using (var xInput = new StringReader(aInputFileContents)) {
using (var xOutput = new StringWriter()) {
var xGenerator = new Cosmos.Compiler.XSharp.Generator();
- xGenerator.Execute(aDefaultNamespace, aInputFileName, xInput, xOutput);
+ xGenerator.Execute(aDefaultNamespace, xClassName, xInput, xOutput);
return xOutput.ToString();
}
}
diff --git a/source2/VSIP/Cosmos.VS.XSharp/Scanner.cs b/source2/VSIP/Cosmos.VS.XSharp/Scanner.cs
index f85d2f47f..ab5abc573 100644
--- a/source2/VSIP/Cosmos.VS.XSharp/Scanner.cs
+++ b/source2/VSIP/Cosmos.VS.XSharp/Scanner.cs
@@ -45,6 +45,7 @@ namespace Cosmos.VS.XSharp {
mTokenMap[(int)XSC.TokenType.Dollar] = new TokenData { Type = TokenType.Operator, Color = TokenColor.Text };
mTokenMap[(int)XSC.TokenType.LessThan] = new TokenData { Type = TokenType.Operator, Color = TokenColor.Text };
mTokenMap[(int)XSC.TokenType.GreaterThan] = new TokenData { Type = TokenType.Operator, Color = TokenColor.Text };
+ mTokenMap[(int)XSC.TokenType.Question] = new TokenData { Type = TokenType.Operator, Color = TokenColor.Text };
mTokenMap[(int)XSC.TokenType.WhiteSpace] = new TokenData { Type = TokenType.WhiteSpace, Color = TokenColor.Text };
mTokenMap[(int)XSC.TokenType.Unknown] = new TokenData { Type = TokenType.Unknown, Color = TokenColor.Text };