Cosmos/source2/Users/Kudzu/Kudzu-Notes.html
2012-07-12 05:41:27 +00:00

238 lines
No EOL
15 KiB
HTML

<html>
<head></head>
<body>
<h3>Public - Easy</h3>
<ul>
<li>Builder position not saving</li>
<li>Integrate VIX so users dont have to download<ul>
<li><a href="http://blogs.vmware.com/vix/2010/05/redistibutable-vix-api-client-libraries.html"
target="_blank">
http://blogs.vmware.com/vix/2010/05/redistibutable-vix-api-client-libraries.html</a></li>
</ul>
</li>
<li>Move selected project profile to .user file.</li>
<li>.iso has a users dir in it</li>
</ul>
<h3>
Public</h3>
<ul>
<li>Convert current DB from FB to SQL Compact<ul>
<li>without EDM as first step - just straight port</li>
</ul>
</li>
<li>Dynamic load/unload IL2CPU and other parts so we dont need to exit and run
builder every time for changes</li>
<li>Builder<ul>
<li><a href="http://www.tellingmachine.com/post/Too-much-VMWare-can-cause-Unable-to-connect-to-host-Error-The-specified-version-was-not-found.aspx">http://www.tellingmachine.com/post/Too-much-VMWare-can-cause-Unable-to-connect-to-host-Error-The-specified-version-was-not-found.aspx</a></li>
<li>there are TWO of these text files if the user has VIX installed, I had to modify
the one in m vmware dir</li>
</ul>
</li>
<li>Cosmos.VS.Windows, Package - use vsix reg tool</li>
</ul>
<h3>
Matthijs</h3>
<ul>
<li>
xsproj</ul>
<h3>
Kudzu</h3>
<ul>
<li>Stop debugging<ul>
<li>EngineUtils.cs - line 74</li>
</ul>
</li>
<li>Complete X# Port<ul>
<li>Use raw asm output instead of cs</li>
<li>Emit .asm instead of .cs. Note for debugging only, not used in compiling.</li>
<li>Screen.XS - //while ESI[0] != 0 {
</li>
</ul>
<ul>
<li>PreserveRegisters</li>
<li>AL = ComRead8()</li>
<li>ComWrite(AL)</li>
</ul>
</li>
<ul>
<li>X# ProcessCmds.CS, ProcessCmdBatch - #TODO Make this a do while loop. Test
elsewhere though, this method is not used currently.<ul>
<li>if eax = 4 { }</li>
</ul>
</li>
<li>Remove old X# translator</li>
</ul>
<li>Simplify assembler - methods and straight to text/bin. Current system is overly
complicated<ul>
<li>Also skip c# step - compile straight to .asm from X#</ul>
<li>return errors
when comport cant open<li>OutputDebug Catcher with filters, categories, timestamps<li>Press stop while on bp with worktation</li>
<li>Press stop while vmware player is running<li>you switched the data and text segments, right? before text was first
data after, and now that&#39;s data-text? if so, we need to fix our &quot;EndOfKernel&quot;
code..<li>X#
Code Completion<li>Asm stepping<ul>
<li>Historical panels</li>
</ul>
</li>
<li>Convert cxdb to sql compact and edm<ul>
<li><a href="http://www.microsoft.com/download/en/details.aspx?id=17876">http://www.microsoft.com/download/en/details.aspx?id=17876</a></li>
</ul>
</li>
<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>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>ATA / FAT</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>
&nbsp;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(&quot;asdf&quot;). 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 &quot;proxy&quot; 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&nbsp; 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) { }
...
[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(object 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 />&nbsp;&nbsp;&nbsp;
<br />&nbsp;&nbsp;&nbsp; [AsmBody(Assembler = typeof(IOWrite8))]<br />&nbsp;&nbsp;&nbsp; public static void Write8(UInt16 aPort, byte aData) { }<br />&nbsp;&nbsp;&nbsp; // Nested class even... :) Keeps it all in one unit!<br />&nbsp;&nbsp;&nbsp; public class IOWrite8 : CodeBlock {
<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override void Assemble() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EDX = EBP + 0x0C;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EAX = EBP + 0x08;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Port[DX] = AL;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }
<br />
<br />}
</p>
</ul>
</body>
</html>