Understanding CPUs by building one in Kotlin