This commit is contained in:
kudzu_cp 2011-07-21 19:17:24 +00:00
parent ea1d8f9db1
commit ea2a4196ce
5 changed files with 30 additions and 32 deletions

View file

@ -88,6 +88,7 @@ Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Docs", "..\Docs", "{67E7DEF
Release.AspNetCompiler.ForceOverwrite = "true"
Release.AspNetCompiler.FixedNames = "false"
Release.AspNetCompiler.Debug = "False"
VWDPort = "4516"
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cosmos.Compiler.Debug", "..\source2\IL2CPU\Cosmos.IL2CPU.Debug\Cosmos.Compiler.Debug.csproj", "{9998B4EA-385E-4DA2-8905-2BBEB5B2C6E2}"
@ -1172,9 +1173,9 @@ Global
{C5519AC3-218A-4211-9D40-B23AA80FB35E} = {D95021E1-A2C9-4829-819E-ED433AF13162}
{AB24E403-54F3-4F67-B5E0-119A7227AAC1} = {FF5BAFDE-AE9D-438D-935A-86B33EE0A758}
{6D2688FE-6FD8-44A8-B96A-6037457F72A7} = {FF5BAFDE-AE9D-438D-935A-86B33EE0A758}
{35CABD9D-5C85-419A-B6C9-561EAD97A553} = {FF5BAFDE-AE9D-438D-935A-86B33EE0A758}
{4266FA56-F6FE-4E9B-BAE3-B6910183884C} = {FF5BAFDE-AE9D-438D-935A-86B33EE0A758}
{3370FC04-B669-46A4-A4AA-A89540318F8D} = {FF5BAFDE-AE9D-438D-935A-86B33EE0A758}
{35CABD9D-5C85-419A-B6C9-561EAD97A553} = {FF5BAFDE-AE9D-438D-935A-86B33EE0A758}
{C4941654-3D7A-484B-9F5C-3D331AB8F585} = {1698DD83-72A3-44CD-B088-4320A4014A95}
{9D82B35C-7133-4ADE-AA5C-0FFB2BFA8BA6} = {A4478219-065D-4928-BB4D-4358CAD39A03}
{2DF5F17F-4890-4856-ADFD-4DE23282C3B7} = {A4478219-065D-4928-BB4D-4358CAD39A03}
@ -1190,8 +1191,8 @@ Global
{63F7BFB9-419E-4965-B580-304B9C9FA7D8} = {6A15C540-8278-4B9C-B890-FA57FB6AE6A6}
{52BF0A64-EBEF-420A-9F27-6C5226A4B77B} = {6A15C540-8278-4B9C-B890-FA57FB6AE6A6}
{C801F19C-A9D3-42D5-9A57-9FFDF9B4D05E} = {6A15C540-8278-4B9C-B890-FA57FB6AE6A6}
{239E33A7-F0C3-4801-85CA-4D8F89A31DC0} = {6A15C540-8278-4B9C-B890-FA57FB6AE6A6}
{576C3D3B-A3EA-44FA-8E39-AFD3E6F3FE23} = {6A15C540-8278-4B9C-B890-FA57FB6AE6A6}
{239E33A7-F0C3-4801-85CA-4D8F89A31DC0} = {6A15C540-8278-4B9C-B890-FA57FB6AE6A6}
{6658FCE0-7032-4B7B-BD95-F2765C393442} = {2DF5F17F-4890-4856-ADFD-4DE23282C3B7}
{6882C74B-3ED2-4D76-9E7B-67B6A28808BC} = {0CF14D0F-6054-4D3D-9062-E3D2EB064A4E}
{23476FAD-3712-4A4B-90C0-CCCC9AC8D953} = {0CF14D0F-6054-4D3D-9062-E3D2EB064A4E}

View file

@ -106,6 +106,8 @@ namespace Cosmos.Compiler.DebugStub {
static protected DataMember32 DebugTraceMode;
// enum Status
static protected DataMember32 DebugStatus;
// Nesting control for non steppable routines
static protected DataMember32 DebugSuspendLevel;
public DebugStub(int aComNo) {
mComNo = aComNo;
@ -114,8 +116,6 @@ namespace Cosmos.Compiler.DebugStub {
// Old method, need to convert to fields
mAsm.DataMembers.AddRange(new DataMember[]{
// Nesting control for non steppable routines
new DataMember("DebugSuspendLevel", 0),
// Nesting control for non steppable routines
new DataMember("DebugResumeLevel", 0),
// Ptr to the push all data. It points to the "bottom" after a PushAll op.
@ -908,7 +908,7 @@ namespace Cosmos.Compiler.DebugStub {
// IRQ's are disabled between Compare and JumpIf so an IRQ cant
// happen in between them which could also cause double entry.
DisableInterrupts();
Memory["DebugSuspendLevel", 32].Compare(0);
DebugSuspendLevel.Value.Compare(0);
JumpIf(Flags.Equal, "DebugStub_Running");
// DebugStub is already running, so exit.
// But we need to see if IRQs are disabled.
@ -981,18 +981,15 @@ namespace Cosmos.Compiler.DebugStub {
}
}
}
public class DebugPoint : CodeGroup {
public class DebugSuspend : CodeBlock {
public override void Assemble() {
Memory["DebugSuspendLevel", 32]++;
DebugSuspendLevel.Value++;
}
}
public class DebugResume : CodeBlock {
public override void Assemble() {
Memory["DebugSuspendLevel", 32]--;
DebugSuspendLevel.Value--;
}
}
}

View file

@ -19,9 +19,18 @@ namespace Cosmos.Compiler.XSharp {
return new MemoryAction(ElementReference.New(Name)) { IsIndirect = true, Size = 32 };
}
set {
new Move {
DestinationRef = ElementReference.New(Name), DestinationIsIndirect = true
, SourceValue = value.Value.GetValueOrDefault(), SourceRef = value.Reference, SourceReg = value.Register, SourceIsIndirect = value.IsIndirect };
// For DataMember32 value will be null with ++ and --, this is important and purposeful.
// ++ and -- try to set again, but for us we dont want that.
if (value != null) {
new Move {
DestinationRef = ElementReference.New(Name),
DestinationIsIndirect = true,
SourceValue = value.Value.GetValueOrDefault(),
SourceRef = value.Reference,
SourceReg = value.Register,
SourceIsIndirect = value.IsIndirect
};
}
}
}
}

View file

@ -33,11 +33,13 @@ namespace Cosmos.Compiler.XSharp {
public static MemoryAction operator ++(MemoryAction aTarget) {
aTarget.ApplyToDest(new INC());
// Must return null, see DataMember.this[] comment
return null;
}
public static MemoryAction operator --(MemoryAction aTarget) {
aTarget.ApplyToDest(new Dec());
// Must return null, see DataMember.this[] comment
return null;
}

View file

@ -258,9 +258,6 @@ namespace Cosmos.IL2CPU.X86 {
if (mComNumber > 0) {
var xStub = new DebugStub(mComNumber);
xStub.Assemble();
var xStub2 = new DebugPoint();
xStub2.Assemble();
} else {
new Label("DebugStub_Step");
new Return();
@ -271,12 +268,9 @@ namespace Cosmos.IL2CPU.X86 {
#if !LFB_1024_8
DataMembers.Add(new DataIfNotDefined("ELF_COMPILATION"));
uint xFlags = 0x10003;
DataMembers.Add(new DataMember("MultibootSignature",
new uint[] { 0x1BADB002 }));
DataMembers.Add(new DataMember("MultibootFlags",
xFlags));
DataMembers.Add(new DataMember("MultibootChecksum",
(int)(0 - (xFlags + 0x1BADB002))));
DataMembers.Add(new DataMember("MultibootSignature", new uint[] { 0x1BADB002 }));
DataMembers.Add(new DataMember("MultibootFlags", xFlags));
DataMembers.Add(new DataMember("MultibootChecksum", (int)(0 - (xFlags + 0x1BADB002))));
DataMembers.Add(new DataMember("MultibootHeaderAddr", ElementReference.New("MultibootSignature")));
DataMembers.Add(new DataMember("MultibootLoadAddr", ElementReference.New("MultibootSignature")));
DataMembers.Add(new DataMember("MultibootLoadEndAddr", ElementReference.New("_end_code")));
@ -285,12 +279,9 @@ namespace Cosmos.IL2CPU.X86 {
DataMembers.Add(new DataEndIfDefined());
DataMembers.Add(new DataIfDefined("ELF_COMPILATION"));
xFlags = 0x00003;
DataMembers.Add(new DataMember("MultibootSignature",
new uint[] { 0x1BADB002 }));
DataMembers.Add(new DataMember("MultibootFlags",
xFlags));
DataMembers.Add(new DataMember("MultibootChecksum",
(int)(0 - (xFlags + 0x1BADB002))));
DataMembers.Add(new DataMember("MultibootSignature", new uint[] { 0x1BADB002 }));
DataMembers.Add(new DataMember("MultibootFlags", xFlags));
DataMembers.Add(new DataMember("MultibootChecksum", (int)(0 - (xFlags + 0x1BADB002))));
DataMembers.Add(new DataEndIfDefined());
#else
DataMembers.Add(new DataIfNotDefined("ELF_COMPILATION"));
@ -330,10 +321,8 @@ namespace Cosmos.IL2CPU.X86 {
// memory
DataMembers.Add(new DataMember("MultiBootInfo_Memory_High", 0));
DataMembers.Add(new DataMember("MultiBootInfo_Memory_Low", 0));
DataMembers.Add(new DataMember("Before_Kernel_Stack",
new byte[0x50000]));
DataMembers.Add(new DataMember("Kernel_Stack",
new byte[0]));
DataMembers.Add(new DataMember("Before_Kernel_Stack", new byte[0x50000]));
DataMembers.Add(new DataMember("Kernel_Stack", new byte[0]));
DataMembers.Add(new DataMember("MultiBootInfo_Structure", new uint[1]));
}