From c09c0f24595c4ee65825c2af73dfd76092496409 Mon Sep 17 00:00:00 2001
From: mterwoord_cp <7cd3fd84a0151ea055c2f79e4d2eef9576fe9afesxUZAwxD>
Date: Thu, 30 Aug 2007 17:33:25 +0000
Subject: [PATCH]
---
source/HelloWorldAssembler/Program.cs | 22 +++++++++++++++++--
source/Indy.IL2CPU.Assembler/Assembler.cs | 7 +++++-
source/Indy.IL2CPU.Assembler/Compare.cs | 18 +++++++++++++++
.../Indy.IL2CPU.Assembler.csproj | 4 ++++
source/Indy.IL2CPU.Assembler/Invoke.cs | 2 +-
source/Indy.IL2CPU.Assembler/JumpIfZero.cs | 16 ++++++++++++++
source/Indy.IL2CPU.Assembler/Label.cs | 11 ++++++++--
source/Indy.IL2CPU.Assembler/Move.cs | 19 ++++++++++++++++
source/Indy.IL2CPU.Assembler/Test.cs | 20 +++++++++++++++++
9 files changed, 113 insertions(+), 6 deletions(-)
create mode 100644 source/Indy.IL2CPU.Assembler/Compare.cs
create mode 100644 source/Indy.IL2CPU.Assembler/JumpIfZero.cs
create mode 100644 source/Indy.IL2CPU.Assembler/Move.cs
create mode 100644 source/Indy.IL2CPU.Assembler/Test.cs
diff --git a/source/HelloWorldAssembler/Program.cs b/source/HelloWorldAssembler/Program.cs
index 0dfcd56cd..1de8a5b0b 100644
--- a/source/HelloWorldAssembler/Program.cs
+++ b/source/HelloWorldAssembler/Program.cs
@@ -11,8 +11,26 @@ namespace HelloWorldAssembler {
using (Assembler a = new Assembler(xSW)) {
a.OutputType = Assembler.OutputTypeEnum.Console;
a.Includes.Add("win32w.inc");
- a.DataMembers.Add(new DataMember("_class", "TCHAR", "'Win32 program template'"));
- new Invoke("GetModuleHandle", new object[] {0});
+ a.DataMembers.Add(new DataMember("_class", "TCHAR", "'FASMWIN32'"));
+ a.DataMembers.Add(new DataMember("_title", "TCHAR", "'Win32 program template'"));
+ a.DataMembers.Add(new DataMember("_error", "TCHAR", "'Startup failed.'"));
+ a.DataMembers.Add(new DataMember("wc", "WNDCLASS", "0,WindowProc,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,NULL,_class"));
+ new Invoke("GetModuleHandle", 0);
+ new Move("[wc.hInstance]", "eax");
+ new Invoke("LoadIcon", 0, "IDI_APPLICATION");
+ new Move("[wc.hIcon]", "eax");
+ new Invoke("LoadCursor", 0, "IDC_ARROW");
+ new Move("[wc.hCursor]", "eax");
+ new Invoke("RegisterClass", "wc");
+ new Test("eax", "eax");
+ new JumpIfZero("error");
+ new Invoke("CreateWindowEx", 0, "_class", "_title", "WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU", 128, 128, 256, 192, "NULL", "NULL", "[wc.hInstance]", "NULL");
+ new Test("eax", "eax");
+ new JumpIfZero("error");
+ new Label("msg_loop");
+ new Invoke("GetMessage", "msg", "NULL", 0, 0);
+ new Compare("eax", "1");
+
a.Flush();
}
}
diff --git a/source/Indy.IL2CPU.Assembler/Assembler.cs b/source/Indy.IL2CPU.Assembler/Assembler.cs
index 04a5e048b..a63a74992 100644
--- a/source/Indy.IL2CPU.Assembler/Assembler.cs
+++ b/source/Indy.IL2CPU.Assembler/Assembler.cs
@@ -102,7 +102,12 @@ namespace Indy.IL2CPU.Assembler {
mOutputWriter.WriteLine();
mOutputWriter.WriteLine(" " + EntryPointLabelName + ":");
foreach (Instruction x in mInstructions) {
- mOutputWriter.WriteLine("\t" + x);
+ string prefix = "\t";
+ if (x is Label) {
+ mOutputWriter.WriteLine();
+ prefix = " ";
+ }
+ mOutputWriter.WriteLine(prefix + x);
}
}
}
diff --git a/source/Indy.IL2CPU.Assembler/Compare.cs b/source/Indy.IL2CPU.Assembler/Compare.cs
new file mode 100644
index 000000000..f6f14674f
--- /dev/null
+++ b/source/Indy.IL2CPU.Assembler/Compare.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Indy.IL2CPU.Assembler {
+ public class Compare: Instruction {
+ public readonly string Address1;
+ public readonly string Address2;
+ public Compare(string aAddress1, string aAddress2) {
+ Address1 = aAddress1;
+ Address2 = aAddress2;
+ }
+ public override string ToString() {
+ return "cmp " + Address1 + "," + Address2;
+ }
+ }
+}
\ No newline at end of file
diff --git a/source/Indy.IL2CPU.Assembler/Indy.IL2CPU.Assembler.csproj b/source/Indy.IL2CPU.Assembler/Indy.IL2CPU.Assembler.csproj
index 2fa6458f2..715582aa3 100644
--- a/source/Indy.IL2CPU.Assembler/Indy.IL2CPU.Assembler.csproj
+++ b/source/Indy.IL2CPU.Assembler/Indy.IL2CPU.Assembler.csproj
@@ -50,14 +50,18 @@
+
+
+
+