This month, Zak Kohler will be presenting “Computer hardware from opcodes to IO: Build a Virtual Machine in Python”.

Programming languages are designed for a specific level of abstraction or distance from the hardware. The main trade off is “developer productivity” vs “control over hardware”. C and assembly are low level and therefore map closely to CPU instructions. Python on the other hand goes through many layers, libraries, and a virtual machine before the CPU is reached. This allows powerful programs to be written concisely and cross-platform—but it also leaves an immense “Magic Valley” of faith. Eliminating the magic can lead to interesting insights and a greater appreciation for the subtleties of performance, quirks of legacy compatibility, and the purpose of operating systems.

We will build up a virtual machine in Python, and I will connect these concepts to concrete hardware details as they naturally emerge.

Guaranteed material: opcodes, CPU, data/address bus, ROM/RAM, and IO.

Bonus material: assemblers, interrupts, tty output.

Afterwards we’ll be heading to Brazenhead on 5th in Grandview.