Table of contents
- Introduction
- Into the world of FPGAs
- Computers everywhere
- Field-programmable Gate Arrays
- Retrocomputing
- Haskell meets Hardware
- Hello, Clash!
- Bit
- Signal
- Our first circuit
- Summary
- Combinational Circuits are Applicative Functors
- Signal is an applicative functor
- BitVectors and Vectors
- Controlling many LEDs
- Seven-segment display
- Summary
- State, Sequencing and Clocks: The Register Transfer-Level Model
- Clocks and registers
- The RTL model: register and delayed feedback
- Finally blinkenlights!
- Passing around Clock, Reset and Enable lines implicitly
- Multiple clocks
- Pushbutton-toggled LED
- Summary
- Time-domain Multiplexing
- Does this have anything to do with mux?
- Seven-segment displays, revisited
- Keyboard matrix sweeping
- Showing keypad input on a seven-segment output
- Summary
- Project: Pocket Calculator
- A Minimal Viable Calculator
- Binary Coded Decimal arithmetic
- State and state transitions
- An interactive software implementation
- Hooking it up to hardware peripherals
- Summary
- Video Output Using VGA
- Basic operation of a CRT display
- Video Graphics Array
- VGA from Clash
- Summary
- Generative Graphics
- Combinational patterns
- Stateful pattern generators
- Animation
- Coordinate transformations
- Animation, differently
- High-level simulation with SDL2
- Summary
- Project: Pong
- What is Pong?
- Top-level design
- What is our state?
- Drawing
- Summary
- Asynchronous Serial Communication
- Synchronicity
- Universal Asynchronous Serial Communication
- Serial Transmitter
- Serial Receiver
- Applications
- Summary
- Programmable Machines
- RAM machines
- Memory
- CPU
- Summary
- Brainfuck
- Why Brainfuck
- Brainfuck as a programming language
- Brainfuck as byte code
- Brainfuck with external memory
- A complete Brainfuck computer
- Brainfuck as machine code
- High-level simulation of the CPU
- The logic board
- Low-level simulation of the logic board
- Top-level circuit and peripherals
- Summary
- CHIP-8
- History
- The CHIP-8 computer
- Instruction set
- Video
- CPU
- Simulation, take 1
- The complete machine
- Simulation, take 2
- Memory contention
- Summary
- Address decoding and memory maps
- Room for improvement
- A whirlwind intro to Template Haskell
- A memory map DSL
- Backpane connections
- Access contention
- Summary
- Intel 8080
- History
- Veracity
- Interface
- Instruction set architecture
- Instruction decoding
- Microcoded implementation
- Micro-architecture & micro-instructions
- A direct software implementation
- The complete CPU
- Summary
- Project: Tiny BASIC
- What is Tiny BASIC?
- Asynchronous Communications Interface Adapter
- The core logic board
- Version 1: serial I/O
- PS/2 keyboard interface
- Textual video
- Screen editing
- Version 2: Keyboard and video
- Summary
- Space Invaders
- The design of Space Invaders
- How it fits together
- Peripherals
- Video
- Logic board
- Simulation
- Summary
- Compucolor II
- Design
- A Minimal Viable Compucolor II
- Detailed rendering with SDL
- Video hardware
- TMS 5501
- Keyboard
- Floppy drive
- Cycle-count accuracy
- Slowing down the CPU
- Our complete computer
- Summary
- Parting words