/project-based-tutorials-in-c

Copy of the abandoned repository: https://github.com/rby90/project-based-tutorials-in-c

Project based tutorials in C

A list of tutorials that work towards the making of small to large projects in C.

Table of Contents

Computer Architecture

Name Description Link Tags
bitwise Bitwise is an educational project where we create the software/hardware stack for a computer from scratch. GitHub abandoned, video
Emulator 101 Writing an arcade game emulator is an awesome learning project, and this tutorial will take you through the entire process in a detailed way. Want to really learn how a CPU works? Writing an emulator is the best way to learn about it. Link text
Virtual Machine in C Writing a VM in C Link text, virtual-machine
Writing a CHIP-8 emulator Writing a Chip 8 emulator
  • Part 1
  • Part 2
  • Part 3
  • Part 4
  • Part 5
  • emulator, text
    Writing a Game Boy emulator Writing a Game Boy emulator Link text, emulator
    Write your Own Virtual Machine In this tutorial, I will teach you how to write your own virtual machine (VM) that can run assembly language programs, such as my friend’s 2048 or my Roguelike. Link text, virtual-machine

    Computer Networking

    Name Description Link Tags
    Beej's Guide to Network Programming Hey! Socket programming got you down? Is this stuff just a little too difficult to figure out from the man pages? You want to do cool Internet programming, but you don’t have time to wade through a gob of structs trying to figure out if you have to call bind() before you connect(), etc., etc. Well, guess what! I’ve already done this nasty business, and I’m dying to share the information with everyone! You’ve come to the right place. This document should give the average competent C programmer the edge s/he needs to get a grip on this networking noise. Link book
    Concurrent Servers A series of posts about concurrent network servers
  • Part 1 - Introduction
  • Part 2 - Threads
  • Part 3 - Event-driven
  • Part 4 - libuv
  • Part 5 - Redis case study
  • Part 6 - Callbacks, Promises and async/await
  • text, concurrency, network-programming
    Building a simple HTTP server Everything you need to know to Build a simple HTTP server from scratch Medium http, text
    Let's code a TCP/IP stack The purpose of these posts and the resulting software is purely educational - to learn network and system programming at a deeper level.
  • Part 1: Ethernet & ARP
  • Part 2: IPv4 & ICMPv4
  • Part 3: TCP Basics & Handshake
  • Part 4: TCP Data Flow & Socket API
  • Part 5: TCP Retransmission
  • networking, text
    Write an MQTT broker from scratch It’s been a while that for my daily work I deal with IoT architectures and research best patterns to develop such systems, including diving through standards and protocols like MQTT; as I always been craving for new ideas to learn and refine my programming skills, I thought that going a little deeper on the topic would’ve been cool and useful too. So once again I git init a low-level project on my box pushing myself a little further by sharing my steps.
  • Part 1 - The protocol
  • Part 2 - Networking
  • Part 3 - Server
  • Part 4 - Data structures
  • Part 5 - Topic abstraction
  • Part 6 - Handlers
  • text, mqtt
    Let's make a NTP Client in C Writing a NTP client in C Link ntp, text

    Databases

    Name Description Link Tags
    Let's Build a Simple Database Writing a sqlite clone from scratch in C Link text, sqlite

    Game Development

    Name Description Link Tags
    Astroids Clone Simple Astroids clone using assets from Kenney's Space Shooter Redux and Space Shooter Extension Link tutorial
    Brickout Clone Make a Brickout Clone using the GTK+ library Link tutorial
    Chess Engine in C Write a program/engine that plays Chess Link tutorial
    Coding a Sudoku Solver in C Self explanatory Link tutorial, video
    Coding a Rogue/ Nethack in C Self explanatory Link video, tutorial
    Create a Game Loop using C and SDL Learn to create a game loop from scratch using the C programming language and SDL Link course
    Creating a 2D platformer Learn how to create a simple multi-scrolling 2D platformer Link tutorial
    Creating a 2D shoot 'em up How to create a simple 2D shoot 'em up Link tutorial
    Creating a 2D top-down shooter how to create a simple top-down 2D shooter that we're going to call Battle Arena Donk! Mouse controls will be used extensively throughout Link tutorial
    Handmade Hero Handmade Hero is an ongoing project by Casey Muratori to create a complete, professional-quality game accompanied by videos that explain every single line of its source code Link video, tutorial
    Hangman Write hangman the game! Link video
    How to Program an NES game in C Self explanatory Link tutorial
    How to Program a Text Adventure in C Self explanatory Link tutorial
    Implementing Solitaire in C Self explanatory Link tutorial
    Invaders Clone Simple Invaders clone using Kenney's Space Shooter redux pack Link tutorial
    Learn How To Develop Your Own GameBoy Games Self explanatory Link video
    Learn Video Game Programming in C Self explanatory Link video
    Let’s Make: Dangerous Dave Self explanatory Link video
    Making a game in C from scratch Self explanatory Link video
    Making a Video Game from Scratch in C Self explanatory Link video
    On Tetris and Reimplementation Implement Tetris from scratch in C, except the GUI. Link tutorial
    SDL 2 Isometric Game Tutorial Code a Isometric Game in C. Isometric video game graphics are graphics employed in video games and pixel art that use a parallel projection, but which angle the viewpoint to reveal facets of the environment that would otherwise not be visible from a top-down perspective or side view, thereby producing a three-dimensional effect. Link video
    Simple Tic Tac Toe in C Self explanatory Link video
    Text Adventure A text based adventure game
  • Episode 1
  • Episode 2
  • video
    Tic-tac-toe Game in C with SDL Self explanatory Link video sdl, tutorial, video
    Video Game Physics Tutorial Learn the physics of video games. Covers various topics.
  • Part I: An Introduction to Rigid Body Dynamics
  • Part II: Collision Detection for Solid Objects
  • Part III: Constrained Rigid Body Simulation
  • physics, tutorial
    Write Othello Game from scratch in C Write a crossplatform Othello game - the Othello engine, UI Link tutorial
    Write The Old-School Fire Effect and Bare-Metal Programming in Assembly and C Draw fire on the screen! Link tutorial
    Writing 2D Games in C using SDL Self explanatory Link video, tutorial
    Writing a Game Boy Advance Game Self explanatory Link tutorial

    Operating Systems

    Name Description Link Tags
    Build a minimal multi-tasking OS kernel for ARM from scratch Self explanatory GitHub arm, multi-tasking
    Build Your Own Shell This is the material for a series of workshops I ran at my workplace on how to write a Unix shell. GitHub shell
    Building an Operating System for the Raspberry Pi Self explanatory Link raspberry-pi
    Hacking the Virtual memory Self explanatory
  • Chapter 0: Hack The Virtual Memory: C strings & /proc
  • Chapter 1: Hack The Virtual Memory: Python bytes
  • Chapter 2: Hack The Virtual Memory: Drawing the VM diagram
  • Chapter 3: Hack the Virtual Memory: malloc, the heap & the program break
  • virtual-memory
    os-tutorial How to create an OS from scratch GitHub operating-system
    Learning KVM - implement your own kernel Most introduction articles of KVM I found are actually introducing either libvirt or qemu, lack of how to utilize KVM directly, that's why I have this post. Link kvm
    raspberry-pi-os Learning operating system development using Linux kernel and Raspberry Pi GitHub raspberry-pi, text
    shell-workshop Materials from my Strange Loop 2014 workshop, Let's Build a Shell! GitHub shell, text
    Malloc tutorial Let's write a malloc and see how it works with existing programs! Link malloc
    Let’s write a Kernel Self explanatory
  • Part 1: Kernel 101
  • Part 2: Kernel 201
  • kernel, text
    Linux containers in 500 lines of code Self explanatory Link containers, text
    Operating systems development for Dummies If you’ve ever used a computer, you may have found yourself wondering how operating systems function on a low level, or even how you you would go about developing one yourself. To say that kernel development is difficult is a severe understatement, it really is “the great pinnacle of programming”. In this guide, we will introduce the basic tools needed and implement a simple operating system in C and x86 Assembly. Link operating-systems, text
    os01 Bootstrap yourself to write an OS from scratch. A book for self-learner. Link book
    Hack The Kernel ops-class.org includes everything you need to learn about operating systems online. Link course
    Re-Writing BSD 4.4 Shell Commands Self explanatory
  • cat
  • chmod
  • echo
  • mkdir
  • video
    Writing a Unix Shell One of the projects that I am exploring at RC, is writing a UNIX shell. This is the first part of a series of posts that will eventually follow.
  • Part 1
  • Part 2
  • Part 3
  • shell
    Roll your own toy UNIX-clone OS This set of tutorials aims to take you through programming a simple UNIX-clone operating system for the x86 architecture. The tutorial uses C as the language of choice, with liberally mixed in bits of assembler. The aim is to talk you through the design and implementation decisions in making an operating system. The OS we make is monolithic in design (drivers are loaded through kernel-mode modules as opposed to user-mode programs), as this is simpler. Link unix, text
    The little book about OS development This text is a practical guide to writing your own x86 operating system. It is designed to give enough help with the technical details while at the same time not reveal too much with samples and code excerpts. We’ve tried to collect parts of the vast (and often excellent) expanse of material and tutorials available, on the web and otherwise, and add our own insights into the problems we encountered and struggled with. Link book
    Write a Shell in C Self explanatory Link shell
    Write a simple memory allocator This article is about writing a simple memory allocator in C. We will implement malloc(), calloc(), realloc() and free(). Link allocator
    Write a System Call Self explanatory Link system-calls
    Write a shell in C Ever wondered how that terminal just works? A more correct question would be how that shell just works? I had one of those too and It took me a couple of searches and a lot of reading to figure out how. I wrote a shell in C, first a basic and then added few more features on top of it. I’ve written the process for writing a basic shell in C. Link shell

    Programming Languages

    Name Description Link Tags
    acwj A compiler writing journey Link compilers
    Writing a regular expression matcher Self explanatory Link regular-expression
    A Regular Expression Matching Can Be Simple And Fast Self explanatory Link regular-expression
    Baby’s First Garbage Collector Garbage collection is considered one of the more shark-infested waters of programming, but in this post, I’ll give you a nice kiddie pool to paddle around in. (There may still be sharks in it, but at least it will be shallower.) Link gc
    Build Your Own Lisp Learn C and build your own programming language in 1000 lines of code! Link book
    Compiler Design in C Self explanatory PDF book
    Crafting Interpreters Ever wanted to make your own programming language or wondered how they are designed and built? If so, this book is for you. Link book
    Let's build a compiler A C & x86 version of the "Let's Build a Compiler" by Jack Crenshaw A C & x86 version of the "Let's Build a Compiler" by Jack Crenshaw Let's Build a Compiler: A C & x86 version compilers
    Write a C Interpreter Write a simple interpreter of C. Inspired by c4 and largely based on it.
  • Part 0: Preface
  • Part 1: Skeleton
  • Part 2: Virtual Machine
  • Part 3: Lexer
  • Part 4: Top-down Parsing
  • Part 5: Variables
  • Part 6: Functions
  • Part 7: Statements
  • Part 8: Expressions
  • interpreter
    Writing a simple garbage collector in C Self explanatory Link gc
    Scheme from Scratch Self explanatory
  • Part 1 - Introduction
  • Part 2 - Integers
  • Part 3 - Booleans
  • Part 4 - Characters
  • Part 5 - Strings
  • Part 6 - The Empty List
  • Part 7 - Pairs
  • Part 8 - Symbols
  • Part 9 - Quote
  • Part 10 - Environments
  • Part 11 - if
  • Part 12 - Primitive Procedures Part 1
  • Part 13 - Primitive Procedures Part 2
  • Part 14 - Lambda the Ultimate
  • Part 15 - Begin
  • Part 16 - Cond
  • Part 17 - Let
  • Part 18 - And and Or
  • Part 19 - Apply
  • Part 20 - Eval
  • Part 21 - I/O
  • Part 22 - Standard Library
  • Part 23 - Garbage Collection
  • Part 24 - Conclusion
  • Part 22 - Standard Library
  • Part 23 - Garbage Collection
  • Part 24 - Conclusion
  • scheme

    Uncategorized

    Name Description Link Tags
    A dummy blockchain implementation in C Self explanatory
  • Part 1
  • Part 2
  • blockchain
    Build Your Own Text Editor This is an instruction booklet that shows you how to build a text editor in C. Link text-editor
    A Bigint Calculator This is a programming exercise I've wanted to do for a long time: an implementation of arbitrary-precision integer ("bigint") arithmetic in C. Link calculator
    Zip Files Write your own ZIP from scratch in C Link compression
    SVG Library in C In this post I will develop a simple C library to create and save an SVG (Scalable Vector Graphics) file, complete with a few examples of its use. Link graphics