<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8364300951143549997</id><updated>2011-12-29T20:34:15.549+01:00</updated><title type='text'>t00ny's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hc-t00ny.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8364300951143549997/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hc-t00ny.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>t00ny</name><uri>http://www.blogger.com/profile/17676818916399877739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8364300951143549997.post-3229244772561104063</id><published>2009-09-19T19:11:00.001+02:00</published><updated>2011-03-05T22:50:27.871+01:00</updated><title type='text'>EasyConfig C++ Class</title><content type='html'>Hey all, I just wanted to share with you a class I made that is kinda useful when you want to manipulate the Config files such as *.ini.&lt;br /&gt;&lt;br /&gt;You'll see it's not hard at all to use it.&lt;br /&gt;&lt;br /&gt;Please note that there are 2 constructors, an empty one that doesn't require any argument and another one that takes the file name.&lt;br /&gt;-&gt;If you declare an object without any file name, you'll have to use the SetFileName method.&lt;br /&gt;&lt;br /&gt;Here's an exemple :&lt;br /&gt;&lt;pre&gt;#include "stdafx.h"&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;int main(int argc, char* argv[])&lt;br /&gt;{&lt;br /&gt;ConfigFile myIni;&lt;br /&gt;&lt;br /&gt;myIni.SetFileName("C:\\Hax.txt");&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; myIni.ReadStringValue("LOL", "value1").c_str() &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;    cout &lt;&lt; "Writing int into value2..." &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;    myIni.WriteValue("LOL", "value2", 1337);&lt;br /&gt;    cout &lt;&lt; myIni.ReadIntValue("LOL", "value2") &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;    cout &lt;&lt; "Writing float into value3..." &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;    myIni.WriteValue("LOL", "value3", 3.14f);&lt;br /&gt;    cout &lt;&lt; myIni.ReadFloatValue("LOL", "value3") &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;WriteValue is an overloaded function that works with float, int and strings which is actually what I needed.The code launches a ConfigFileException when shit happens.For exemple :&lt;pre&gt;ConfigFile myIni;&lt;br /&gt;&lt;br /&gt;cout &lt;&lt; myIni.ReadStringValue("LOL", "value1").c_str() &lt;&lt; endl;&lt;br /&gt;&lt;/pre&gt;In this code, we didn't set a file name.The code will launch an exception that contains :- The file name (In this case, it's &lt;no File Name&gt;)- And the error descriptionTo avoid unhandled exceptions :&lt;pre&gt;ConfigFile myIni;&lt;br /&gt;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;cout &lt;&lt; myIni.ReadStringValue("LOL", "value1").c_str() &lt;&lt; endl;&lt;br /&gt;}&lt;br /&gt;catch( ConfigFileException e )&lt;br /&gt;{&lt;br /&gt;cout &lt;&lt; "*** EXCEPTION CAUGHT ***"&lt;&lt; endl;&lt;br /&gt;cout &lt;&lt; e.fileName &lt;&lt; endl;&lt;br /&gt;cout &lt;&lt; e.errMessage&lt;&lt; endl;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;I added the exceptions stuff today, so if you find anything i could add/correct, just say =)And now, the file you're all waiting for :&lt;a href="http://gfxgame.free.fr/private/easycfg.cpp"&gt;EasyCfg.cpp&lt;/a&gt;&lt;br /&gt;Alright, if you liked this don't forget the credits if you'd like to use it. A 'thank you' never killed anybody ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8364300951143549997-3229244772561104063?l=hc-t00ny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hc-t00ny.blogspot.com/feeds/3229244772561104063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hc-t00ny.blogspot.com/2009/09/easyconfig-c-class.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8364300951143549997/posts/default/3229244772561104063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8364300951143549997/posts/default/3229244772561104063'/><link rel='alternate' type='text/html' href='http://hc-t00ny.blogspot.com/2009/09/easyconfig-c-class.html' title='EasyConfig C++ Class'/><author><name>t00ny</name><uri>http://www.blogger.com/profile/17676818916399877739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8364300951143549997.post-2314892879755962720</id><published>2009-09-19T17:59:00.005+02:00</published><updated>2011-03-05T22:51:24.641+01:00</updated><title type='text'>Using the Kernel Level Video Memory</title><content type='html'>&lt;b&gt;How to use the Video Memory&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here are the ways to use the computer's video memory, I'm first going to show you how to use it from it's address.&lt;br /&gt;&lt;br /&gt;Generally, the Video Memory Base Address is 0xB8000. When you want to draw a character, you must set 2 bytes. The first one is is the character, the second is the&lt;br /&gt;attributes. Here's an exemple to understand how to print a character :&lt;br /&gt;&lt;code&gt;mov byte [0xB8000],'A' ;The Character Itself &lt;br /&gt;mov byte [0xB8001],0xF ;Character's Attribute (0xF = 00001111)&lt;br /&gt;&lt;/code&gt;Here's defined a black background with a white foreground :&lt;br /&gt;&lt;br /&gt;Blinking (H)      BackGround (H)      Intensity (L)      ForeGround (L) &lt;br /&gt;0                  000                   1                     111     &lt;br /&gt;&lt;br /&gt;The colors are in RGB format, The max value is 1, the minimum is 0 &lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Color&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Code&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Black&lt;br /&gt;&lt;/td&gt;&lt;td&gt;000&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Blue&lt;br /&gt;&lt;/td&gt;&lt;td&gt;001&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Red&lt;br /&gt;&lt;/td&gt;&lt;td&gt;100&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Green&lt;br /&gt;&lt;/td&gt;&lt;td&gt;010&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Yellow&lt;br /&gt;&lt;/td&gt;&lt;td&gt;110&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Purple&lt;br /&gt;&lt;/td&gt;&lt;td&gt;101&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cyan&lt;br /&gt;&lt;/td&gt;&lt;td&gt;011&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;White&lt;br /&gt;&lt;/td&gt;&lt;td&gt;111&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Now that we know the basics, we're going to write our first string !&lt;br /&gt;&lt;code&gt;mov byte [0xB8000],'H'&lt;br /&gt;mov byte [0xB8001],0xF&lt;br /&gt;mov byte [0xB8002],'E'&lt;br /&gt;mov byte [0xB8003],0xF&lt;br /&gt;mov byte [0xB8004],'L'&lt;br /&gt;mov byte [0xB8005],0xF&lt;br /&gt;mov byte [0xB8006],'L'&lt;br /&gt;mov byte [0xB8007],0xF&lt;br /&gt;mov byte [0xB8008],'O'&lt;br /&gt;mov byte [0xB8009],0xF&lt;br /&gt;mov byte [0xB800A],' '&lt;br /&gt;mov byte [0xB800B],0xF&lt;br /&gt;mov byte [0xB800C],'W'&lt;br /&gt;mov byte [0xB800D],0xF&lt;br /&gt;mov byte [0xB800E],'O'&lt;br /&gt;mov byte [0xB800F],0xF&lt;br /&gt;mov byte [0xB8010],'R'&lt;br /&gt;mov byte [0xB8011],0xF&lt;br /&gt;mov byte [0xB8012],'L'&lt;br /&gt;mov byte [0xB8013],0xF&lt;br /&gt;mov byte [0xB8014],'D'&lt;br /&gt;mov byte [0xB8015],0xF&lt;br /&gt;mov byte [0xB8016],' '&lt;br /&gt;mov byte [0xB8017],0xF&lt;br /&gt;mov byte [0xB8018],'!'&lt;br /&gt;mov byte [0xB8019],0xF&lt;br /&gt;&lt;/code&gt;Example ran in VirtualBox :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__zvjb9YlTNM/SrUBsorjooI/AAAAAAAAAAM/8wh0g-pQ4A4/s1600-h/ss1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/__zvjb9YlTNM/SrUBsorjooI/AAAAAAAAAAM/8wh0g-pQ4A4/s400/ss1.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;But, typing all this code is odd, and we could write a DrawString function. Let's write it in C :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; #define RAMSCREEN 0xB8000 &amp;nbsp; &amp;nbsp; &amp;nbsp; /* Video Memory */&lt;br /&gt;&amp;nbsp;&amp;nbsp; #define UCHAR unsigned char&lt;br /&gt;&amp;nbsp;&amp;nbsp; #define LPUCHAR unsigned char* &lt;br /&gt;&amp;nbsp;&amp;nbsp; LPUCHAR VideoMemory = (LPUCHAR)RAMSCREEN;&lt;br /&gt;&amp;nbsp;&amp;nbsp; int strlen(char* text)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int i = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while(text[i])&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;i++;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return i;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;void print(char* text)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int i;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int j;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;for(i = 0, j = 0; i &amp;lt; strlen(text); i++, j += 2)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;VideoMemory[j] &amp;nbsp; &amp;nbsp; = &amp;nbsp; &amp;nbsp; text[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;/code&gt; I tried to make it in ASM for you lucky people, but because I'm not a pro, it sucks a bit :&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DrawString:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;xor ebx, ebx&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;xor edx, edx&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;mov ebx, [ConsolePos]&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;draw_start:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;mov al, [ecx]&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;cmp al, 0 &amp;nbsp; &amp;nbsp; ; \0 char ? &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;je draw_end&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;cmp al, 10 &amp;nbsp; &amp;nbsp; ; New Line ?&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;je new_line &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;;Print the char &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;mov byte [0xB8000 + ebx], al&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;add ebx, 2 &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;inc ecx&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;jmp draw_start&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;new_line:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;mov edx, [ConsolePos]&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;add edx, 160&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;mov ebx, edx&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;mov [ConsolePos], ebx&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;inc ecx&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;jmp draw_start&lt;br /&gt;&amp;nbsp;&amp;nbsp; draw_end:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ret&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;C_SystemLoad &amp;nbsp; &amp;nbsp; db "Loading Main Kernel...", 10, 0 &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;ConsolePos &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dd 0&lt;br /&gt;&amp;nbsp;&amp;nbsp; KernelStart:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;mov ecx, C_SystemLoad &lt;br /&gt;call DrawString&lt;br /&gt;&amp;nbsp;&amp;nbsp; end:&lt;br /&gt;jmp end&lt;/code&gt;&lt;br /&gt;Well I hope you've learnt from this tut, This tutorial was written by me. Thanks to OSDev for their helpful forums/website ;D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8364300951143549997-2314892879755962720?l=hc-t00ny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hc-t00ny.blogspot.com/feeds/2314892879755962720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hc-t00ny.blogspot.com/2009/09/using-kernel-level-video-memory.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8364300951143549997/posts/default/2314892879755962720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8364300951143549997/posts/default/2314892879755962720'/><link rel='alternate' type='text/html' href='http://hc-t00ny.blogspot.com/2009/09/using-kernel-level-video-memory.html' title='Using the Kernel Level Video Memory'/><author><name>t00ny</name><uri>http://www.blogger.com/profile/17676818916399877739</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/__zvjb9YlTNM/SrUBsorjooI/AAAAAAAAAAM/8wh0g-pQ4A4/s72-c/ss1.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
