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.
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
________________________________________________________________________________
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
________________________________________________________________________________
LIME Voxel Renderer April 2021 - July 2023
Experiments with novel 3D rendering techniques. Written with Vulkan and C.
Github
________________________________________________________________________________
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
________________________________________________________________________________
christopher.lang.256@gmail.com