chris256.com                                                             C. Lang
                                                                      March 2025
               _          _     ____  ____   __
           ___| |__  _ __(_)___|___ \| ___| / /_   ___ ___  _ __ ___
          / __| '_ \| '__| / __| __) |___ \| '_ \ / __/ _ \| '_ ` _ \
         | (__| | | | |  | \__ \/ __/ ___) | (_) | (_| (_) | | | | | |
          \___|_| |_|_|  |_|___/_____|____/ \___(_)___\___/|_| |_| |_|
                              My Personal Website
________________________________________________________________________________

                                 USEFULL LINKS
       ,
       \`-._           __               Me
        \\  `-..____,.'  `.             
         :`.         /    \`.               gihub
         :  )       :      : \              linkedin
          ;'        '   ;  |  :         
          )..      .. .:.`.;  :         This Site
         /::...  .:::...   ` ;          
         ; _ '    __        /:\             documents
         `:o>   /\o_>      ;:. `.           papers
        `-`.__ ;   __..--- /:.   \          articles
        === \_/   ;=====_.':.     ;         jotto
         ,/'`--'...`--....        ;     
              ;                    ;    Great Software
            .'                      ;   
          .'                        ;       void linux   - linux distro
        .'     ..     ,      .       ;      kakoune      - text editor
       :       ::..  /      ;::.     |      dwm,dmenu,st - X applications
      /      `.;::.  |       ;:..    ;      tmux         - terminal multiplexer
     :         |:.   :       ;:.    ;       git          - source control
     :         ::     ;:..   |.    ;        nmap         - network scanner
      :       :;      :::....|     |    
      /\     ,/ \      ;:::::;     ;    
    .:. \:..|    :     ; '.--|     ;    
   ::.  :''  `-.,,;     ;'   ;     ;    
.-'. _.'\      / `;      \,__:      \   
`---'    `----'   ;      /    \,.,,,/
                   `----`
                            ----------------------------------------------
                           / Dicipline is following your own rules,       \
People and Groups          \ obedience is following the rules of another. /
                             ---------------------------------------------
    Protesilaos Stavrou                                \   ^__^
    Luke Smith                                          \  (oo)\_______
    suckless.org                                           (__)\       )\/\
    John Baez                                                  ||----w |
    Dynamicland                                                ||     ||
________________________________________________________________________________

DPLL (Propositional Logic) Sodoku Solver                            Febuary 2025

    I wrote then to help me internalise concepts I'm learning in a course on logic
    and proof (Cambridge IB 2425) and to help me learn OCaml.

    Davis-Putnam-Logeman-Loveland DPLL is a propositional logic algorithm to find
    an interpretation that satisfies an expression. For example, you might ask it to
    find an interpretation for
      (X OR Y) AND (NOT (X AND Y))
    and it might tell you that
      {X=true, Y=false} entails (X OR Y) AND (NOT (X AND Y)).

    We express a sodoku problem as a propositional logic statement of 9*9*9=729
    variables where proposition P(i,j,n) is true iff the cell with coordinates (i,j)
    holds the number n in the solution. Here i,j,n are elements of {1..9}. Then we
    ask DPLL to find a solution.

    Github

       6 . 9 | . . . | . 2 3                      6 5 9 | 7 8 1 | 4 2 3
       . . 3 | 9 6 . | . . 1                      4 2 3 | 9 6 5 | 7 8 1
       7 1 . | . . . | . 6 .                      7 1 8 | 4 3 2 | 9 6 5
       ------+-------+------                      ------+-------+------
       5 8 . | 1 . 7 | . . 4                      5 8 2 | 1 9 7 | 6 3 4
       . 4 . | . . 8 | 2 . 9      --------->      3 4 1 | 6 5 8 | 2 7 9
       9 . 6 | 3 . . | 5 . .                      9 7 6 | 3 2 4 | 5 1 8
       ------+-------+------                      ------+-------+------
       . . 4 | . 7 3 | 8 9 .                      1 6 4 | 5 7 3 | 8 9 2
       . . 5 | . . . | 3 . 7                      8 9 5 | 2 1 6 | 3 4 7
       2 . . | . 4 . | . . .                      2 3 7 | 8 4 9 | 1 5 6
________________________________________________________________________________

Another x86-64 Assembly Video Game                                  Febuary 2025

    Github

    Video game made by Christopher and Anthony for the 2025 Cambridge Game Jam.
    Written in x86-64 assembly. Graphics and input were supported by communicating
    with an X11 server. It is a two-player online multiplayer cooperative game.

    The theme of the game jam was 'Synesthesia'. The player must vicariously
    'sense' where the red and green buckets are on the teammates screen only by
    verbal communication.

          Video Game Screenshot

    Tips for writing assembly:

    strace and gdb are your friend. If you dont know how to do something then write
    a C program to do it and the examine the strace logs when it runs. Use gdb
    breakpoint command lists to replace printf debugging.
      The cost of making abstractions is greater in assembly (takes time to write
    function interfaces, etc..). This means you should modularise your code and data
    into slightly larger chunks than you might be used to in higher level languages.
    Effectivly using global variables is a large part of this.
________________________________________________________________________________

clce (C Chess Engine)                                                 March 2024

    **UNFINISHED**
    A better chess engine. Featuring magic bitboards and lichess api support.
    'clce' stand for C language chess engine and Chris Lang's chess engine.

    Github
________________________________________________________________________________

Dos 16-bit Assembly Video Game ('Lazer Recoil')                     Febuary 2024


    Made in 48 hours for the 2024 Cambridge University Game Jam. The theme was
    'reflections'. Runs in dosbox emulator.

    Github

          DOSBox screen capture
________________________________________________________________________________

6502 Computer                                                     September 2023

    65C02 microprocessor reads instructions from 28C256 memory and writes draw
    instructions to an output interfaace register which connects to an LCD
    character display.

    Video

          6502 Computer
________________________________________________________________________________

LIME Voxel Renderer                                       April 2021 - July 2023

    Experiments with novel 3D rendering techniques. Written with Vulkan and C.

    Github

LIME Render 1  LIME Render 2
________________________________________________________________________________

PIFS OS Compilation Guide                                             March 2023

    Like LFS [1], but for cross-compiling a Raspberry-Pi OS. I wrote this guide
    for my second EPQ.

        * guide
        * report

    [1] LFS https://www.linuxfromscratch.org/lfs/
________________________________________________________________________________

x86_64 Assembly Pong                                                January 2022

    Implementation of the video game 'Pong' in x86_64 assembly. Draws graphics
    directly to Linux framebuffer at /dev/fb0. Reads keyboard input directly
    from device files in /dev/input.

    Github

Pong
________________________________________________________________________________

                                                            Profile Image
                                                  christopher.lang.256@gmail.com