mirror of
https://github.com/danbulant/Cosmos
synced 2026-06-12 03:01:32 +00:00
Added a bit more order to Kudzu's notes on what's left to do.
This commit is contained in:
parent
2f836e466d
commit
308998fafc
1 changed files with 150 additions and 188 deletions
|
|
@ -1,196 +1,158 @@
|
|||
<html>
|
||||
<head></head>
|
||||
<body>
|
||||
<h3>
|
||||
Kudzu</h3>
|
||||
<ul>
|
||||
<li>Now that we have "express in one"... do we still need Guess and GuessKernel ie 2 projects for every one? can we merge back into one again?</li>
|
||||
<li>ATA / FAT</li>
|
||||
<li>Asm stepping<ul>
|
||||
<li>Historical registers and stack</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>X#<ul>
|
||||
<li>use includes for compiling nasm</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>AL = ComRead8()</li>
|
||||
<li>ComWrite(AL)</li>
|
||||
<li>Code completion</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Plugs<ul>
|
||||
<li>Allow plug attrib to specify asm name and link to X# directly.</ul>
|
||||
<li>OutputDebug Catcher with filters, categories, timestamps<li>Increase speed of DebugStub / lower impact</li>
|
||||
<li>DS Ping or set a breakpoint while not in a break state will hang VS.<ul>
|
||||
<li>This is because its waiting on some other command to release?</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Compile / Build speed. Current slow areas. Time each of these.<ul>
|
||||
<li>IL2CPUTask<ul>
|
||||
<li>xScanner.Execute(xInitMethod); - This used to be faster... something has slowed
|
||||
this down. What?</li>
|
||||
<li>Cosmos.Debug.Common - new DebugInfo(xOutputFilename + ".mdf", true) - Takes
|
||||
longer than Id like. But its SQL... not sure if we can do much. Maybe could do a
|
||||
copy of raw file? Or is the problem SQL local startup time? If so would using
|
||||
express solve this?</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>ExtractMapFromElfFile - SQL is slow on inserts. Only store GUID labels. Add .asm
|
||||
file position and when we need a label in between, parse just those parts of ASM
|
||||
to get them. Also if we do this, probably dont need to store actual label name
|
||||
at all.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Watches<ul>
|
||||
<li>Memory watches</li>
|
||||
<li>this:28 - show its size</li>
|
||||
<li>watches - show EBP+-</li>
|
||||
<li>frame - show var names</li>
|
||||
<li>asm window - show values of EBP, etc...</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>watches that can see fields/members<ul>
|
||||
<li>of other classes besides this</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>ring restrictions on console etc.. by class, or explict inclusion</li>
|
||||
<li>PIT/RTC<ul>
|
||||
<li>And sleep, needed for ATA</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>tohex plug based on string input of X8 etc</li>
|
||||
<li>Bootstrap - clean up more</li>
|
||||
<li>networking</li>
|
||||
<li>gc</li>
|
||||
<li>USB</li>
|
||||
<p>
|
||||
scanner issue: <a href="http://groups.yahoo.com/group/Cosmos-Dev/message/4789">http://groups.yahoo.com/group/Cosmos-Dev/message/4789</a><br />debugstub.SkipMethod<br />SkipClass<br />speedup debug stub on no trigger<br />compiler dynamic load<br />unsafe arrays but controllled
|
||||
</p>
|
||||
<h3>
|
||||
Matthijs - Next Release</h3>
|
||||
<ul>
|
||||
<li>Express isnt showing any templates - VB only?</li>
|
||||
<li>C# for menus</li>
|
||||
<li>Debug VS on Cosmos menu</li>
|
||||
</ul>
|
||||
<h3>
|
||||
Trivalik - Next Release</h3>
|
||||
<ul>
|
||||
<li>Remove 2008<ul>
|
||||
<li>And 2010 suffixes</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>
|
||||
Next Release + 1</h3>
|
||||
<ul>
|
||||
<li>Throw exception on null ref...</li>
|
||||
<li>Plugs - warn if plugging something that doesnt exists... caused the x08 bug?</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>(joint with Kudzu) - Move all critical plugs out of old asms and remove building
|
||||
of old asms.<ul>
|
||||
<li>And the plugs also from CustomImplementations in IL2CPU?</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Exceptions dont work. Try int.parse("asdf"). It runs but when the exception is
|
||||
hit we get garbage back instead. (ie exceptions through plug proxy dont work)</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>IL2CPU.AlwaysCompile attribute and get rid of IDT.Dummy</li>
|
||||
<li>int j = Array.IndexOf(Digits, s[i]);<ul>
|
||||
<li>When Digits is a char array, we get a plug needed error.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>cxdb contains full asm path and filenames over and over... cant we write them
|
||||
out once and use a byte/word index to identify them? This will make it smaller
|
||||
and make reading faster.</li>
|
||||
<li>Plugs
|
||||
<ul>
|
||||
<li>Source Plugs - Leave as they are</li>
|
||||
<li>Assembly Plugs - Change to have attribute on the TARGET instead of the
|
||||
implementation and only allow assembly.. this cuts out the "proxy" class and
|
||||
makes it easier to find plug impls. See Rings.html for more info. The assembly
|
||||
level plugs can even go in the same assembly, source file and if we can the same
|
||||
class? That is currently these assembly plugs require 3 classes to implement.
|
||||
its ugly and messy... we can get it down to 2 - 1 + assembly (X# only!). Current
|
||||
way is such a mess we even comment them as plugged, but then have to go guessing
|
||||
where the impl is... See example down below....</li>
|
||||
<li>Convert all source plugs and disable old attributes...so for new ones use new
|
||||
names</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>We need to dynamically
|
||||
load the plugs etc so we can just rebuild and run and even trace them without
|
||||
rerunnig the bat for each change</li>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>Ring attributes and enforcement<ul>
|
||||
<li>Also allow restriction of assembly references</li>
|
||||
<li>Only allow core to be /unsafe, no others</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h3>
|
||||
Even later</h3>
|
||||
<ul>
|
||||
<li>localloc - int.parse needs plug for now because of this.</li>
|
||||
<li>Filesystem</li>
|
||||
<li>Memory Manager<ul>
|
||||
<li>http://www.osdever.net/tutorials/view/memory-management-1</li>
|
||||
<li>http://www.osdever.net/tutorials/view/memory-management-2</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>UDP</li>
|
||||
<li>TCP</li>
|
||||
<li>Cosmos.Debug.Common - much in here is not common and should be moved to
|
||||
VSDebug.. Add Readme.html that NASM and VSDebug use whats left</li>
|
||||
<li>foreach / interfaces</li>
|
||||
</ul>
|
||||
<h3>
|
||||
Further Down</h3>
|
||||
<ul>
|
||||
<li>USB</li>
|
||||
</ul>
|
||||
<h3>
|
||||
Assembly Plug Example</h3>
|
||||
<h4>
|
||||
Old way</h4>
|
||||
<p>
|
||||
(3 classes, often 3 source files as well)</p>
|
||||
<pre>public class CPUBus {
|
||||
// Plugged
|
||||
public static void Write8(UInt16 aPort, byte aData) { }
|
||||
...
|
||||
<h3>General list of stuff left to do...</h3>
|
||||
<ul>
|
||||
<li>Now that we have "express in one"... do we still need Guess and GuessKernel ie 2 projects for every one? can we merge back into one again?</li>
|
||||
<li>ATA / FAT</li>
|
||||
<li>X#
|
||||
<ul>
|
||||
<li>use includes for compiling nasm</li>
|
||||
<li>AL = ComRead8()</li>
|
||||
<li>ComWrite(AL)</li>
|
||||
<li>Code completion</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Plugs
|
||||
<ul>
|
||||
<li>Allow plug attrib to specify asm name and link to X# directly.</li>
|
||||
<li>warn if plugging something that doesnt exists... caused the x08 bug?</li>
|
||||
<li>(joint with Kudzu) - Move all critical plugs out of old asms and remove building of old asms.
|
||||
<ul>
|
||||
<li>And the plugs also from CustomImplementations in IL2CPU?</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Source Plugs - Leave as they are</li>
|
||||
<li>Assembly Plugs - Change to have attribute on the TARGET instead of the implementation and only allow assembly.. this cuts out the "proxy" class and makes it easier to find plug impls. See Rings.html for more info. The assembly level plugs can even go in the same assembly, source file and if we can the same class? That is currently these assembly plugs require 3 classes to implement. its ugly and messy... we can get it down to 2 - 1 + assembly (X# only!). Current way is such a mess we even comment them as plugged, but then have to go guessing where the impl is... See example down below....</li>
|
||||
<li>Convert all source plugs and disable old attributes...so for new ones use new names</li>
|
||||
<li>int j = Array.IndexOf(Digits, s[i]);
|
||||
<ul>
|
||||
<li>When Digits is a char array, we get a plug needed error.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>We need to dynamically load the plugs etc so we can just rebuild and run and even trace them without rerunning the bat for each change</li>
|
||||
<li>tohex plug based on string input of X8 etc</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>OutputDebug Catcher with filters, categories, timestamps</li>
|
||||
<li>Debug Stub
|
||||
<ul>
|
||||
<li>Increase speed of DebugStub / lower impact</li>
|
||||
<li>debugstub.SkipMethod</li>
|
||||
<li>SkipClass</li>
|
||||
<li>Speedup debug stub on no trigger</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Compile / Build speed. Current slow areas. Time each of these.
|
||||
<ul>
|
||||
<li>IL2CPUTask</li>
|
||||
<li>xScanner.Execute(xInitMethod); - This used to be faster... something has slowed this down. What?</li>
|
||||
<li>Cosmos.Debug.Common - new DebugInfo(xOutputFilename + ".mdf", true) - Takes longer than Id like. But its SQL... not sure if we can do much. Maybe could do a copy of raw file? Or is the problem SQL local startup time? If so would using express solve this?</li>
|
||||
<li>ExtractMapFromElfFile - SQL is slow on inserts. Only store GUID labels. Add .asm file position and when we need a label in between, parse just those parts of ASM to get them. Also if we do this, probably dont need to store actual label name at all.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Watches
|
||||
<ul>
|
||||
<li>Memory watches</li>
|
||||
<li>Watches that can see fields/members (of other classes besides <i>this</i>)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Ring attributes and enforcement
|
||||
<ul>
|
||||
<li>Also allow restriction of assembly references</li>
|
||||
<li>Only allow core to be /unsafe, no others</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Ring restrictions on console etc.. by class, or explict inclusion</li>
|
||||
<li>PIT/RTC
|
||||
<ul>
|
||||
<li>And sleep, needed for ATA</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Bootstrap - clean up more</li>
|
||||
<li>Networking</li>
|
||||
<li>GC</li>
|
||||
<li>Scanner issue: <a href="http://groups.yahoo.com/group/Cosmos-Dev/message/4789">http://groups.yahoo.com/group/Cosmos-Dev/message/4789</a></li>
|
||||
<li>Compiler dynamic load</li>
|
||||
<li>Unsafe arrays but controlled</li>
|
||||
</ul>
|
||||
<h3>Matthijs</h3>
|
||||
<ul>
|
||||
<li>C# for menus</li>
|
||||
<li>Debug VS on Cosmos menu</li>
|
||||
<li>Throw exception on null ref...</li>
|
||||
<li>Exceptions dont work. Try int.parse("asdf"). It runs but when the exception is hit we get garbage back instead. (ie exceptions through plug proxy dont work)</li>
|
||||
<li>IL2CPU.AlwaysCompile attribute and get rid of IDT.Dummy</li>
|
||||
<li>cxdb contains full asm path and filenames over and over... cant we write them out once and use a byte/word index to identify them? This will make it smaller and make reading faster.</li>
|
||||
</ul>
|
||||
<h3>Later</h3>
|
||||
<ul>
|
||||
<li>localloc - int.parse needs plug for now because of this.</li>
|
||||
<li>Filesystem</li>
|
||||
<li>Memory Manager<ul>
|
||||
<li>http://www.osdever.net/tutorials/view/memory-management-1</li>
|
||||
<li>http://www.osdever.net/tutorials/view/memory-management-2</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>UDP</li>
|
||||
<li>TCP</li>
|
||||
<li>Cosmos.Debug.Common - much in here is not common and should be moved to
|
||||
VSDebug.. Add Readme.html that NASM and VSDebug use whats left</li>
|
||||
<li>foreach / interfaces</li>
|
||||
</ul>
|
||||
<h3>Even Later</h3>
|
||||
<ul>
|
||||
<li>USB</li>
|
||||
</ul>
|
||||
<h3>Assembly Plug Example</h3>
|
||||
<h4>Old way</h4>
|
||||
<p>(3 classes, often 3 source files as well)</p>
|
||||
<pre>
|
||||
public class CPUBus
|
||||
{
|
||||
// Plugged
|
||||
public static void Write8(UInt16 aPort, byte aData) { }
|
||||
...
|
||||
|
||||
[Plug(Target = typeof(Cosmos.Kernel.CPUBus))]
|
||||
class CPUBus {
|
||||
[PlugMethod(Assembler = typeof(Assemblers.IOWrite8))]
|
||||
public static void Write8(UInt16 aPort, byte aData) { }
|
||||
...
|
||||
[Plug(Target = typeof(Cosmos.Kernel.CPUBus))]
|
||||
class CPUBus {
|
||||
[PlugMethod(Assembler = typeof(Assemblers.IOWrite8))]
|
||||
public static void Write8(UInt16 aPort, byte aData) { }
|
||||
...
|
||||
|
||||
public sealed class IOWrite8: AssemblerMethod {
|
||||
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo) {
|
||||
//TODO: This is a lot of work to write to a single port. We need to have some kind of inline ASM option that can emit a single out instruction
|
||||
new CPUx86.Move { DestinationReg = CPUx86.Registers.EDX, SourceReg = CPUx86.Registers.EBP, SourceDisplacement = 0xC, SourceIsIndirect = true };
|
||||
new CPUx86.Move { DestinationReg = CPUx86.Registers.EAX, SourceReg = CPUx86.Registers.EBP, SourceDisplacement = 0x8, SourceIsIndirect = true };
|
||||
new CPUx86.Out { DestinationReg = CPUx86.Registers.AL };
|
||||
}
|
||||
} </pre>
|
||||
<h4>
|
||||
New way</h4>
|
||||
<p>
|
||||
See how much neater and self contained this is? :)</p>
|
||||
<p>
|
||||
public class CPUBus {<br />
|
||||
<br /> [AsmBody(Assembler = typeof(IOWrite8))]<br /> public static void Write8(UInt16 aPort, byte aData) { }<br /> // Nested class even... :) Keeps it all in one unit!<br /> public class IOWrite8 : CodeBlock {
|
||||
<br /> public override void Assemble() {<br /> EDX = EBP + 0x0C;<br /> EAX = EBP + 0x08;<br /> Port[DX] = AL;<br /> }<br /> }
|
||||
<br />
|
||||
<br />}
|
||||
</p>
|
||||
</ul>
|
||||
public sealed class IOWrite8: AssemblerMethod
|
||||
{
|
||||
public override void AssembleNew(Cosmos.Assembler.Assembler aAssembler, object aMethodInfo)
|
||||
{
|
||||
//TODO: This is a lot of work to write to a single port. We need to have some kind of inline ASM option that can emit a single out instruction
|
||||
new CPUx86.Move { DestinationReg = CPUx86.Registers.EDX, SourceReg = CPUx86.Registers.EBP, SourceDisplacement = 0xC, SourceIsIndirect = true };
|
||||
new CPUx86.Move { DestinationReg = CPUx86.Registers.EAX, SourceReg = CPUx86.Registers.EBP, SourceDisplacement = 0x8, SourceIsIndirect = true };
|
||||
new CPUx86.Out { DestinationReg = CPUx86.Registers.AL };
|
||||
}
|
||||
}
|
||||
...
|
||||
</pre>
|
||||
<h4>New way</h4>
|
||||
<p>See how much neater and self contained this is? :)</p>
|
||||
<pre>
|
||||
public class CPUBus
|
||||
{
|
||||
[AsmBody(Assembler = typeof(IOWrite8))]
|
||||
public static void Write8(UInt16 aPort, byte aData) { }
|
||||
|
||||
// Nested class even... :) Keeps it all in one unit!
|
||||
public class IOWrite8 : CodeBlock
|
||||
{
|
||||
public override void Assemble()
|
||||
{
|
||||
EDX = EBP + 0x0C;
|
||||
EAX = EBP + 0x08;
|
||||
Port[DX] = AL;
|
||||
}
|
||||
}
|
||||
}
|
||||
</pre>
|
||||
</ul>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in a new issue