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>`__