mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2024-12-29 16:56:30 +00:00
dbf8647d59
Added top & right borders to RawDr. Improved spacing in some debug and compiler reporting. Fixed RawPutChar and EdLite tab width. Fixed Ui missing '0x' prefix syntax highlighter bug. Added 32BitPaint demo.
99 lines
9.5 KiB
HTML
Executable file
99 lines
9.5 KiB
HTML
Executable file
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html;charset=US-ASCII">
|
|
<meta name="generator" content="ZealOS V0.08">
|
|
<style type="text/css">
|
|
body {background-color:#000000;}
|
|
.cF0{color:#ffffff;background-color:#000000;}
|
|
.cF1{color:#3465a4;background-color:#000000;}
|
|
.cF2{color:#4e9a06;background-color:#000000;}
|
|
.cF3{color:#06989a;background-color:#000000;}
|
|
.cF4{color:#a24444;background-color:#000000;}
|
|
.cF5{color:#75507b;background-color:#000000;}
|
|
.cF6{color:#ce982f;background-color:#000000;}
|
|
.cF7{color:#bcc0b9;background-color:#000000;}
|
|
.cF8{color:#555753;background-color:#000000;}
|
|
.cF9{color:#729fcf;background-color:#000000;}
|
|
.cFA{color:#82bc49;background-color:#000000;}
|
|
.cFB{color:#34e2e2;background-color:#000000;}
|
|
.cFC{color:#ac3535;background-color:#000000;}
|
|
.cFD{color:#ad7fa8;background-color:#000000;}
|
|
.cFE{color:#fce94f;background-color:#000000;}
|
|
.cFF{color:#000000;background-color:#000000;}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<pre style="font-family:monospace;font-size:12pt">
|
|
<a name="l1"></a><span class=cF2>/*When Terry Davis was a kid with a Commodore 64,</span><span class=cF0>
|
|
<a name="l2"></a></span><span class=cF2>the 6502 chip had no multiply instruction</span><span class=cF0>
|
|
<a name="l3"></a></span><span class=cF2>and this is how he had to do it, except,</span><span class=cF0>
|
|
<a name="l4"></a></span><span class=cF2>he used more regs in this example.</span><span class=cF0>
|
|
<a name="l5"></a></span><span class=cF2>*/</span><span class=cF0>
|
|
<a name="l6"></a></span><span class=cF1>asm</span><span class=cF0> {
|
|
<a name="l7"></a></span><span class=cF2>//Opcodes are slightly different to make writing the x86_64 assembler easier.</span><span class=cF0>
|
|
<a name="l8"></a></span><span class=cF2>//See </span><a href="https://tomawezome.github.io/ZealOS/Compiler/OpCodes.DD.html#l1"><span class=cF4>::/Compiler/OpCodes.DD</span></a><span class=cF2>.</span><span class=cF0>
|
|
<a name="l9"></a>
|
|
<a name="l10"></a></span><span class=cF2>//You can clobber RAX,RBX,RCX,RDX,R8,R9.</span><span class=cF0> </span><span class=cF2>The compiler expects that.</span><span class=cF0>
|
|
<a name="l11"></a>
|
|
<a name="l12"></a>MUL_BY_HAND_U8_U8_TO_U16: </span><span class=cF2>//This is only for fun.</span><span class=cF0>
|
|
<a name="l13"></a></span><span class=cF2>//8bit * 8bit-->16bit</span><span class=cF0>
|
|
<a name="l14"></a></span><span class=cF2>//AL*BL-->AX</span><span class=cF0>
|
|
<a name="l15"></a> </span><span class=cF1>MOV</span><span class=cF0> </span><span class=cFC>CL</span><span class=cF0>, </span><span class=cFE>8</span><span class=cF0>
|
|
<a name="l16"></a> </span><span class=cF1>SHL</span><span class=cF0> </span><span class=cFC>AX</span><span class=cF0>, </span><span class=cFE>8</span><span class=cF0>
|
|
<a name="l17"></a>@@05: </span><span class=cF1>SHL1</span><span class=cF0> </span><span class=cFC>AX</span><span class=cF0>
|
|
<a name="l18"></a> </span><span class=cF1>JNC</span><span class=cF0> @@10
|
|
<a name="l19"></a> </span><span class=cF1>ADD</span><span class=cF0> </span><span class=cFC>AL</span><span class=cF0>, </span><span class=cFC>BL</span><span class=cF0>
|
|
<a name="l20"></a>@@10: </span><span class=cF1>DEC</span><span class=cF0> </span><span class=cFC>CL</span><span class=cF0>
|
|
<a name="l21"></a> </span><span class=cF1>JNZ</span><span class=cF0> @@05
|
|
<a name="l22"></a> </span><span class=cF1>RET</span><span class=cF0>
|
|
<a name="l23"></a>
|
|
<a name="l24"></a>_MUL_BY_HAND_U8_U8_TO_U16:: </span><span class=cF2>//C callable</span><span class=cF0>
|
|
<a name="l25"></a> </span><span class=cF1>PUSH</span><span class=cF0> </span><span class=cFC>RBP</span><span class=cF0>
|
|
<a name="l26"></a> </span><span class=cF1>MOV</span><span class=cF0> </span><span class=cFC>RBP</span><span class=cF0>, </span><span class=cFC>RSP</span><span class=cF0>
|
|
<a name="l27"></a> </span><span class=cF1>MOV</span><span class=cF0> </span><span class=cFC>AL</span><span class=cF0>, </span><span class=cF1>U8</span><span class=cF0> </span><span class=cF3>SF_ARG1</span><span class=cF0>[</span><span class=cFC>RBP</span><span class=cF0>] </span><span class=cF2>//</span><a href="https://tomawezome.github.io/ZealOS/Kernel/KernelA.HH.html#l715"><span class=cF4>SF_ARG1</span></a><span class=cF0>
|
|
<a name="l28"></a> </span><span class=cF1>MOV</span><span class=cF0> </span><span class=cFC>BL</span><span class=cF0>, </span><span class=cF1>U8</span><span class=cF0> </span><span class=cF3>SF_ARG2</span><span class=cF0>[</span><span class=cFC>RBP</span><span class=cF0>]
|
|
<a name="l29"></a> </span><span class=cF1>CALL</span><span class=cF0> MUL_BY_HAND_U8_U8_TO_U16
|
|
<a name="l30"></a> </span><span class=cF1>MOVZX</span><span class=cF0> </span><span class=cFC>RAX</span><span class=cF0>, </span><span class=cFC>AX</span><span class=cF0>
|
|
<a name="l31"></a> </span><span class=cF1>POP</span><span class=cF0> </span><span class=cFC>RBP</span><span class=cF0>
|
|
<a name="l32"></a> </span><span class=cF1>RET1</span><span class=cF0> </span><span class=cFE>16</span><span class=cF0>
|
|
<a name="l33"></a>
|
|
<a name="l34"></a>_MUL_U64_U64_TO_U128::
|
|
<a name="l35"></a></span><span class=cF2>//64bit * 64bit-->128bit</span><span class=cF0>
|
|
<a name="l36"></a> </span><span class=cF1>PUSH</span><span class=cF0> </span><span class=cFC>RBP</span><span class=cF0>
|
|
<a name="l37"></a> </span><span class=cF1>MOV</span><span class=cF0> </span><span class=cFC>RBP</span><span class=cF0>, </span><span class=cFC>RSP</span><span class=cF0>
|
|
<a name="l38"></a> </span><span class=cF1>MOV</span><span class=cF0> </span><span class=cFC>RBX</span><span class=cF0>, </span><span class=cF9>U64</span><span class=cF0> </span><span class=cF3>SF_ARG3</span><span class=cF0>[</span><span class=cFC>RBP</span><span class=cF0>]
|
|
<a name="l39"></a> </span><span class=cF1>MOV</span><span class=cF0> </span><span class=cFC>RAX</span><span class=cF0>, </span><span class=cF9>U64</span><span class=cF0> </span><span class=cF3>SF_ARG1</span><span class=cF0>[</span><span class=cFC>RBP</span><span class=cF0>] </span><span class=cF2>//</span><a href="https://tomawezome.github.io/ZealOS/Kernel/KernelA.HH.html#l715"><span class=cF4>SF_ARG1</span></a><span class=cF0>
|
|
<a name="l40"></a> </span><span class=cF1>MUL</span><span class=cF0> </span><span class=cF9>U64</span><span class=cF0> </span><span class=cF3>SF_ARG2</span><span class=cF0>[</span><span class=cFC>RBP</span><span class=cF0>] </span><span class=cF2>//Res RDX:RAX 128bit</span><span class=cF0>
|
|
<a name="l41"></a> </span><span class=cF1>MOV</span><span class=cF0> </span><span class=cF9>U64</span><span class=cF0> [</span><span class=cFC>RBX</span><span class=cF0>], </span><span class=cFC>RAX</span><span class=cF0>
|
|
<a name="l42"></a> </span><span class=cF1>MOV</span><span class=cF0> </span><span class=cF9>U64</span><span class=cF0> </span><span class=cFE>8</span><span class=cF0>[</span><span class=cFC>RBX</span><span class=cF0>], </span><span class=cFC>RDX</span><span class=cF0>
|
|
<a name="l43"></a> </span><span class=cF1>POP</span><span class=cF0> </span><span class=cFC>RBP</span><span class=cF0>
|
|
<a name="l44"></a> </span><span class=cF1>RET1</span><span class=cF0> </span><span class=cFE>24</span><span class=cF0>
|
|
<a name="l45"></a>};
|
|
<a name="l46"></a>
|
|
<a name="l47"></a></span><span class=cF2>//The convention is to put an underscore</span><span class=cF0>
|
|
<a name="l48"></a></span><span class=cF2>//on C callable asm routines.</span><span class=cF0>
|
|
<a name="l49"></a></span><span class=cF1>_extern</span><span class=cF0> _MUL_BY_HAND_U8_U8_TO_U16 </span><span class=cF9>U16</span><span class=cF0> MulU8(</span><span class=cF1>U8</span><span class=cF0> n1, </span><span class=cF1>U8</span><span class=cF0> n2);
|
|
<a name="l50"></a>
|
|
<a name="l51"></a></span><span class=cF1>class</span><span class=cF0> U128
|
|
<a name="l52"></a>{
|
|
<a name="l53"></a> </span><span class=cF9>U64</span><span class=cF0> lo, hi;
|
|
<a name="l54"></a>};
|
|
<a name="l55"></a>
|
|
<a name="l56"></a></span><span class=cF1>_extern</span><span class=cF0> _MUL_U64_U64_TO_U128 </span><span class=cF1>U0</span><span class=cF0> MulU64(</span><span class=cF9>I64</span><span class=cF0> n1, </span><span class=cF9>I64</span><span class=cF0> n2, U128 *_prod);
|
|
<a name="l57"></a>
|
|
<a name="l58"></a></span><span class=cF1>U0</span><span class=cF0> MulByHand()
|
|
<a name="l59"></a>{
|
|
<a name="l60"></a> U128 p;
|
|
<a name="l61"></a>
|
|
<a name="l62"></a> </span><span class=cF6>"2*7 =0x%X\n"</span><span class=cF0>, MulU8(</span><span class=cFE>2</span><span class=cF0>, </span><span class=cFE>7</span><span class=cF0>);
|
|
<a name="l63"></a> </span><span class=cF6>"100*10=0x%X\n"</span><span class=cF0>, MulU8(</span><span class=cFE>100</span><span class=cF0>, </span><span class=cFE>10</span><span class=cF0>);
|
|
<a name="l64"></a>
|
|
<a name="l65"></a> MulU64(</span><span class=cFE>0x0123456789ABCDEF</span><span class=cF0>, </span><span class=cFE>0x1000001</span><span class=cF0>, &p);
|
|
<a name="l66"></a> </span><span class=cF6>"0x0123466789ABCDEF*0x1000001=0x%016X%016X\n"</span><span class=cF0>, p.hi, p.lo;
|
|
<a name="l67"></a>}
|
|
<a name="l68"></a>
|
|
<a name="l69"></a>MulByHand;
|
|
<a name="l70"></a>
|
|
</span></pre></body>
|
|
</html>
|