Reference Materials¶
C Programming¶
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, John Lions
x86 Assembly Language¶
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
- Volume 2A: Instruction Set Reference, A-M
- Volume 2B: Instruction Set Reference, N-Z
- Volume 2C: Instruction Set Reference, Safer mode extensions
- Volume 3A: System Programming Guide, Part 1
- Volume 3B: System Programming Guide, Part 2
- Volume 3C: System Programming Guide, Part 3
Multiprocessor references:
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:
Loading x86 executables in the ELF format:
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, 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)
- VGADOC, Finn Thøgersen, 2000. (local copy - text), (local copy - ZIP)
- Free VGA Project, J.D. Neal, 1998.
Keyboard and Mouse - kern/console.c
8253/8254 Programmable Interval Timer (PIT) - inc/timerreg.h
- 82C54 CHMOS Programmable Interval Timer, Intel, October 1994. (local copy)
- Data Solutions 8253/8254 Tutorial, Data Solutions.
8259/8259A Programmable Interrupt Controller (PIC) - kern/picirq.*
- 8259A Programmable Interrupt Controller, Intel, December 1988.
- Real-Time Clock (RTC) - kern/kclock.*
Phil Storrs PC Hardware book, Phil Storrs, December 1998. In particular:
CMOS Map Table, CMOS Map (by Padgett Peterson, May 1996).
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, ANSI, May 2007.
- Programming Interface for Bus Master IDE Controller, 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, Creative Technology, 1996.
- 8237A High Performance Programmable DMA Controller, Intel, September 1993.
- Sound Blaster 16 Programming Document, Ethan Brodsky, June 1997.
- Sound Programming, Inverse Reality.
E100 Network Interface Card:
E1000 Network Interface Card:
Booting: