mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-31 21:30:19 +00:00
44 lines
1.7 KiB
C#
44 lines
1.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace Indy.IL2CPU.Assembler.X86 {
|
|
public abstract class Assembler: Indy.IL2CPU.Assembler.Assembler {
|
|
public Assembler(Func<string, string> aGetFileNameForGroup, bool aInMetalMode)
|
|
: base(aGetFileNameForGroup, aInMetalMode) {
|
|
}
|
|
|
|
public Assembler(Func<string, string> aGetFileNameForGroup)
|
|
: base(aGetFileNameForGroup) {
|
|
}
|
|
|
|
private static string GetValidGroupName(string aGroup) {
|
|
return aGroup.Replace('-','_').Replace('.', '_');
|
|
}
|
|
|
|
protected override void EmitHeader(string aGroup, StreamWriter aOutputWriter) {
|
|
//mOutputWriter.WriteLine("format ms coff ");
|
|
//mOutputWriter.WriteLine("org 0220000h ; the best place to load our kernel to. ");
|
|
aOutputWriter.WriteLine("use32 ; the kernel will be run in 32-bit protected mode, ");
|
|
aOutputWriter.WriteLine("");
|
|
aOutputWriter.WriteLine("%ifdef {0}", GetValidGroupName(aGroup));
|
|
aOutputWriter.WriteLine("%else");
|
|
aOutputWriter.WriteLine(" %define {0} 1", GetValidGroupName(aGroup));
|
|
aOutputWriter.WriteLine("");
|
|
}
|
|
|
|
protected override void EmitIncludes(string aGroup, StreamWriter aOutputWriter) {
|
|
foreach (string xInclude in (from item in Includes
|
|
where String.Equals(item.Key, aGroup, StringComparison.InvariantCultureIgnoreCase)
|
|
select item.Value).Distinct(StringComparer.InvariantCultureIgnoreCase)) {
|
|
aOutputWriter.WriteLine("%include '{0}'", xInclude);
|
|
}
|
|
}
|
|
|
|
protected override void EmitFooter(string aGroup, StreamWriter aOutputWriter) {
|
|
aOutputWriter.WriteLine("%endif");
|
|
}
|
|
}
|
|
}
|