Reference Materials
===================
.. toctree::
   :hidden:
----------------------
Linux and Git commands
----------------------
- `The Missing Semester of Your CS Education `__, MIT.
-------------
C programming
-------------
- `CS/SE 3377: C Review <_static/read/c.pdf>`__, Sridhar Alagar, UT Dallas.
- `The C programming language `__
- `Modern C `__
- `Learn C The Hard Way `__
----
UNIX
----
- `The UNIX Operating System `__, AT&T Archives at YouTube
- `The UNIX Time-Sharing System `__, Dennis M. Ritchie and Ken L.Thompson, Bell System Technical Journal
- `The Evolution of the Unix Time-sharing System `__, Dennis M. Ritchie
- `A Commentary on the Sixth Edition UNIX Operating System <_static/read/unix6.pdf>`__, John Lions
-------------
x86 emulation
-------------
- `QEMU `__
  (`manual `__)
- `Bochs `__
  (`manual `__,
  `debugging `__)
---------------------
x86 assembly language
---------------------
- `x86 Instruction Set <_static/read/x86_instr.pdf>`__, Anton Burtsev, UC Irvine.
- `PC Assembly Language `__, Paul A. Carter, November 2003.
- `Intel 80386 Programmer's Reference Manual `__,
  1987 (HTML). Much shorter than the full current Intel Architecture manuals below, but describes all processor features used in 6.828.
- `IA-32 Intel Architecture Software Developer's Manuals `__,
   - `Volume I: Basic Architecture <_static/read/ia32/IA32-1.pdf>`__
   - `Volume 2A: Instruction Set Reference, A-M <_static/read/ia32/IA32-2A.pdf>`__
   - `Volume 2B: Instruction Set Reference, N-Z <_static/read/ia32/IA32-2B.pdf>`__
   - `Volume 2C: Instruction Set Reference, Safer mode extensions <_static/read/ia32/IA32-2C.pdf>`__
   - `Volume 3A: System Programming Guide, Part 1 <_static/read/ia32/IA32-3A.pdf>`__
   - `Volume 3B: System Programming Guide, Part 2 <_static/read/ia32/IA32-3B.pdf>`__
   - `Volume 3C: System Programming Guide, Part 3 <_static/read/ia32/IA32-3C.pdf>`__
- Multiprocessor references:
   - `MP specification <_static/read/ia32/MPspec.pdf>`__
   - `IO APIC <_static/read/ia32/ioapic.pdf>`__
- `AMD64 Architecture Programmer's Manual `__.
   - Covers both the "classic" 32-bit x86 architecture and the new 64-bit extensions supported
     by the latest AMD and Intel processors.
- Writing inline assembly language with GCC:
   - `Brennan's Guide to Inline Assembly `__
   - `Inline assembly for x86 in Linux `__
   - `GCC-Inline-Assembly-HOWTO `__
- Loading x86 executables in the ELF format:
   - `Wikipedia: ELF `__
   - `Tool Interface Standard (TIS) Executable and Linking Format (ELF) <_static/read/elf.pdf>`__
-----------------------
PC hardware programming
-----------------------
- General PC architecture information:
   - `Phil Storrs PC Hardware book `__, Phil Storrs, December 1998.
   - `Bochs technical hardware specifications directory `__.
- General BIOS and PC bootstrap:
   - `Wikipedia: BIOS `__
   - `BIOS Services and Software Interrupts `__, Roger Morgan, 1997.
   - `"El Torito" Bootable CD-ROM Format Specification <_static/read/boot-cdrom.pdf>`__, Phoenix/IBM, January 1995.
- VGA display - kern/console.c
   - `OS-Dev `__,
     `Wikipedia: VGA `__,
     `Wikipedia: CGA `__
   - `Wikipedia: VESA `__,  `VESA BIOS Extension (VBE) 3.0 `__,  `Video Electronics Standards Association `__, September 1998. `(local copy) <_static/read/hardware/vbe3.pdf>`__
   - VGADOC, Finn Thøgersen, 2000. `(local copy - text) <_static/read/hardware/vgadoc/>`__, `(local copy - ZIP) <_static/read/hardware/vgadoc4b.zip>`__
   - `Free VGA Project `__, J.D. Neal, 1998.
- Keyboard and Mouse - kern/console.c
   - `Adam Chapweske's resources `__.
- 8253/8254 Programmable Interval Timer (PIT) - inc/timerreg.h
   - `82C54 CHMOS Programmable Interval Timer `__, Intel, October 1994. `(local copy) <_static/read/hardware/82C54.pdf>`__
   - `Data Solutions 8253/8254 Tutorial `__, Data Solutions.
- 8259/8259A Programmable Interrupt Controller (PIC) - kern/picirq.\*
   - `8259A Programmable Interrupt Controller <_static/read/hardware/8259A.pdf>`__, Intel, December 1988.
- Real-Time Clock (RTC) - kern/kclock.\*
   - `Wikipedia:Nonvolatile BIOS memory `__
   - `Phil Storrs PC Hardware book `__, Phil Storrs, December 1998. In particular:
      - `Understanding the CMOS `__
      - `A list of what is in the CMOS `__
   - `CMOS Map Table `__, `CMOS Map `__ (by Padgett Peterson, May 1996).
   - `M48T86 PC Real-Time Clock <_static/read/hardware/M48T86.pdf>`__
- 16550 UART Serial Port - kern/console.c
   - `Wikipedia: Serial port `__
   - `PC16550D Universal Asynchronous Receiver/Transmitter with FIFOs `__, National Semiconductor, 1995.
   - `Technical Data on 16550 `__, Byterunner Technologies.
   - `Interfacing the Serial / RS232 Port `__, CraigPeacock, August 2001.
- IEEE 1284 Parallel Port - kern/console.c
   - `Parallel Port Central `__, Jan Axelson.
   - `Parallel Port Background `__,Warp Nine Engineering.
   - `IEEE 1284 - Updating the PC Parallel Port `__, National Instruments.
   - `Interfacing the Standard Parallel Port `__, Craig Peacock, August 2001.
- IDE hard drive controller - fs/ide.c
   - [ATA8-ACS]: `AT Attachment 8 - ATA/ATAPI Command Set <_static/read/hardware/ATA8-ACS.pdf>`__, ANSI, May 2007.
   - `Programming Interface for Bus Master IDE Controller <_static/read/hardware/IDE-BusMaster.pdf>`__, Brad Hosler, Intel, May 1994.
   - `The Guide to ATA/ATAPI documentation `__, Constantine Sapuntzakis, January 2002.
- Sound cards: (not supported in 6.828 kernel, but you're welcome to do it as a challenge problem!)
   - `Sound Blaster Series Hardware Programming Guide <_static/read/hardware/SoundBlaster.pdf>`__, Creative Technology, 1996.
   - `8237A High Performance Programmable DMA Controller <_static/read/hardware/8237A.pdf>`__, Intel, September 1993.
   - `Sound Blaster 16 Programming Document `__, Ethan Brodsky, June 1997.
   - `Sound Programming `__, Inverse Reality.
- E100 Network Interface Card:
   - `Intel 8255x 10/100 Mbps Ethernet Controller Family Open Source Software Developer Manual <_static/read/hardware/8255X_OpenSDM.pdf>`__
   - `82559ER Fast Ethernet PCI Controller Datasheet <_static/read/hardware/82559ER_datasheet.pdf>`__
- E1000 Network Interface Card:
   - `PCI/PCI-X Family of Gigabit Ethernet Controllers Software Developer's Manual <_static/read/hardware/8254x_GBe_SDM.pdf>`__
- Booting:
   - `Multiboot `__
   - `Minimal Intel Architecture Boot Loader <_static/read/miniboot.pdf>`__