<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Low-Level Programming on AI VOID</title><link>https://ai-blog.noorshomelab.dev/tags/low-level-programming/</link><description>Recent content in Low-Level Programming on AI VOID</description><generator>Hugo</generator><language>en</language><lastBuildDate>Tue, 05 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ai-blog.noorshomelab.dev/tags/low-level-programming/index.xml" rel="self" type="application/rss+xml"/><item><title>Chapter 1: Introduction to C Programming</title><link>https://ai-blog.noorshomelab.dev/c-programming-guide/introduction-to-c/</link><pubDate>Mon, 03 Nov 2025 01:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/c-programming-guide/introduction-to-c/</guid><description>&lt;h1 id="chapter-1-introduction-to-c-programming"&gt;Chapter 1: Introduction to C Programming&lt;/h1&gt;
&lt;p&gt;Welcome to the exciting world of C programming! If you&amp;rsquo;re coming from a background in web development or other high-level languages, C might seem a bit daunting at first. However, it&amp;rsquo;s a foundational language that will give you an unparalleled understanding of how computers actually work. This chapter will introduce you to C, explain why it&amp;rsquo;s still incredibly relevant, give you a brief historical overview, and guide you through setting up your very own C development environment.&lt;/p&gt;</description></item><item><title>Loading ROMs and Initial Boot Sequence</title><link>https://ai-blog.noorshomelab.dev/game-boy-emulator-fsharp/loading-roms-boot-sequence/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/game-boy-emulator-fsharp/loading-roms-boot-sequence/</guid><description>&lt;p&gt;In this chapter, we transition from a theoretical CPU to a system capable of loading and preparing a Game Boy game for execution. This is the pivotal moment where your emulator begins to take on a tangible form, moving from abstract concepts to processing actual game data. We&amp;rsquo;ll implement the crucial functionality of loading a Game Boy ROM file into our Memory Management Unit (MMU) and setting up the initial state of the CPU, mirroring what happens after the Game Boy&amp;rsquo;s internal boot ROM completes.&lt;/p&gt;</description></item><item><title>Chapter 5: Pointers: The Heart of C</title><link>https://ai-blog.noorshomelab.dev/c-programming-guide/pointers-the-heart-of-c/</link><pubDate>Mon, 03 Nov 2025 01:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/c-programming-guide/pointers-the-heart-of-c/</guid><description>&lt;h1 id="chapter-5-pointers-the-heart-of-c"&gt;Chapter 5: Pointers: The Heart of C&lt;/h1&gt;
&lt;p&gt;Welcome to the most distinctive and powerful feature of C: &lt;strong&gt;pointers&lt;/strong&gt;. While intimidating for beginners, mastering pointers is fundamental to truly understanding C and low-level programming. Pointers allow you to directly interact with memory addresses, enabling advanced memory management, efficient data manipulation, and direct hardware interaction.&lt;/p&gt;
&lt;p&gt;In this chapter, we will demystify pointers by exploring:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What memory addresses are and how variables are stored.&lt;/li&gt;
&lt;li&gt;How to declare, initialize, and use pointers.&lt;/li&gt;
&lt;li&gt;The concepts of dereferencing and indirection.&lt;/li&gt;
&lt;li&gt;Pointer arithmetic and its applications.&lt;/li&gt;
&lt;li&gt;How pointers enable &amp;ldquo;pass-by-reference&amp;rdquo; in functions.&lt;/li&gt;
&lt;li&gt;Special types of pointers like &lt;code&gt;NULL&lt;/code&gt; and &lt;code&gt;void&lt;/code&gt; pointers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s confront the &amp;ldquo;dreaded&amp;rdquo; pointer head-on!&lt;/p&gt;</description></item><item><title>Chapter 15: Advanced Topics: Linking C with Assembly Language</title><link>https://ai-blog.noorshomelab.dev/c-programming-guide/linking-c-with-assembly/</link><pubDate>Mon, 03 Nov 2025 01:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/c-programming-guide/linking-c-with-assembly/</guid><description>&lt;h1 id="chapter-15-advanced-topics-linking-c-with-assembly-language"&gt;Chapter 15: Advanced Topics: Linking C with Assembly Language&lt;/h1&gt;
&lt;p&gt;At the heart of low-level programming lies the ability to interact directly with the hardware and exploit the full potential of the CPU. While C provides excellent control, there are times when even C isn&amp;rsquo;t &amp;ldquo;low-level enough.&amp;rdquo; This is where &lt;strong&gt;Assembly Language&lt;/strong&gt; comes in.&lt;/p&gt;
&lt;p&gt;Assembly language is a human-readable representation of the machine code instructions that a processor executes. Linking C with Assembly allows you to:&lt;/p&gt;</description></item><item><title>Chapter 17: Guided Project: Custom Memory Allocator</title><link>https://ai-blog.noorshomelab.dev/c-programming-guide/project-custom-memory-allocator/</link><pubDate>Mon, 03 Nov 2025 01:00:00 +0000</pubDate><guid>https://ai-blog.noorshomelab.dev/c-programming-guide/project-custom-memory-allocator/</guid><description>&lt;h1 id="chapter-17-guided-project-custom-memory-allocator"&gt;Chapter 17: Guided Project: Custom Memory Allocator&lt;/h1&gt;
&lt;p&gt;This project takes you deep into the heart of low-level C programming: &lt;strong&gt;memory management&lt;/strong&gt;. You&amp;rsquo;ve used &lt;code&gt;malloc()&lt;/code&gt; and &lt;code&gt;free()&lt;/code&gt; extensively, but have you ever wondered how they work? In this guided project, you will build a simplified version of a memory allocator.&lt;/p&gt;
&lt;p&gt;This project is significantly more complex than the calculator but offers unparalleled insights into:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pointers and Pointer Arithmetic:&lt;/strong&gt; Extensive use of raw memory addresses.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structures:&lt;/strong&gt; To define memory block metadata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Memory Allocation:&lt;/strong&gt; Understanding &lt;code&gt;sbrk()&lt;/code&gt; (or similar system calls) for getting raw memory from the OS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory Layout:&lt;/strong&gt; How memory is organized and managed at a low level.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error Handling:&lt;/strong&gt; Crucial for robust memory management.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; This will be a &lt;em&gt;very basic&lt;/em&gt; allocator. Real-world &lt;code&gt;malloc&lt;/code&gt; implementations are highly optimized and complex, involving techniques like freelists, memory pools, mutexes for thread safety, and elaborate block splitting/merging algorithms. Our goal is conceptual understanding.&lt;/p&gt;</description></item></channel></rss>