Top
Best
New

Posted by surprisetalk 10/26/2025

The x86 Interrupt List, aka “Ralf Brown's Interrupt List” (2018)(www.cs.cmu.edu)
104 points | 32 comments
summa_tech 11/2/2025|
Long ago, before access to the Internet was cheap and plentiful, and way before search engines made finding this kind of information easy, this was a priceless find for an aspiring low-level programmer. All the (semi-)common PC hardware and software documented in one place.

Endless hours spent exploring VGA hardware registers and trying to apply them for cool visual effects. Learning how the then-new 32-bit Windows interacted with DOS extenders, and trying to make a homemade - very basic - operating system that could do it, too. The thrill of writing a Terminate and Stay Resident alarm clock, and having it finally not explode...

I have very fond memories of the Ralf Brown's Interrupt List.

jesuslop 11/3/2025||
Absolutely. Title says 2018 but it really comes from the dawn of pc. DOS was at 21h, and now linux system calls in x86 are INT 80h.
EarlKing 11/3/2025|||
Linux system calls WERE 80h. If your code is still using an interrupt to access kernel functions then you've got problems. Syscall exists for the simple reason that interrupts are expensive.
zeusk 11/3/2025|||
What do you mean by that? Most syscalls are still interrupt based.
maggit 11/3/2025|||
x86-64 introduced a `syscall` instruction to allow syscalls with a lower overhead than going through interrupts. I don't know any reason to prefer `int 80h` over `syscall` when the latter is available. For documentation, see for example https://www.felixcloutier.com/x86/syscall
adrian_b 11/6/2025|||
While AMD syscall or Intel sysenter can provide a much higher performance than the old "int" instructions, both syscall and sysenter have been designed very badly, as explained by Linus himself in many places. It is extremely easy to use them in ways that do not work correctly, because of subtle bugs.

It is actually quite puzzling why both the Intel designers and the AMD designers have been so incompetent in specifying a "syscall" instruction, when such instructions, but well designed, had been included in many other CPU ISAs for many decades.

When not using an established operating system, where the implementation for "syscall" has been tested for many years and hopefully all bugs have been removed, there may be a reason to use the "int" instruction to transition into the privileged mode, because it is relatively foolproof and it requires a minimum amount of code to be handled.

Now Intel has specified FRED, a new mechanism for handling interrupts, exceptions and system calls, which does not have any of the defects of "int", "syscall" and "sysenter".

The first CPU implementing FRED should be Intel Panther Lake, to be launched by the end of this year, but surprisingly, recently when Intel has made a presentation providing information about Panther Lake no word was said about FRED, even if this is expected to be the greatest innovation of Panther Lake.

I hope that the Panther Lake implementation of FRED is not buggy, which could have made Intel to disable it and postpone its introduction to a future CPU, like they have done many times in the past. For instance, the "sysenter" instruction was intended to be introduced in Intel Pentium Pro, by the end of 1995, but because of bugs it was disabled and not documented until Pentium II, in mid 1997, where it finally worked.

messe 11/3/2025|||
32 bit x86 also has sysenter/sysexit.
adrian_b 11/6/2025||
Only Intel. AMD had its own "syscall" instead of Intel's "sysenter" since the K6 CPU, so x86-64 has inherited that.

AMD's "syscall" corrects some defects of Intel's "sysenter", but unfortunately it introduces some new defects.

Details can be found in the Linux documentation, in comments by Linus Torvalds about the use of these instructions in the kernel.

kragen 11/3/2025|||
Int 80h still works as well as ever on i386.
kaladin-jasnah 11/3/2025||||
I recently found out about swi 0x123456 on ARM...
globalnode 11/3/2025|||
many of the int 21h interrupts were virus install checks, telling for the future direction of microsoft?
anotherlab 11/3/2025|||
I was using this before 2018. I used to write TSR applets for data collection. Knowing what interrupts were being was critical. It could mean the difference between your code working and it dying somewhere in expanded memory space.
burnt-resistor 11/3/2025||
Running disassembly on the system, VGA, and other add-in card BIOSes was often helpful. I recall figuring out how to cycle the palette faster than calling an interrupt, although it would still require vsync to prevent snow* and tearing.

* When updating the overscan region border color on some video cards DACs via direct port I/O, there would be random speckling of dots of previous and new colors like analog snow if synchronization to wait for the vertical blanking interval wasn't observed. This is the sort of shit emulation doesn't reproduce faithfully. It sometimes took having access to a lot of hardware to verify a program doing hardware-specific VGA tweaks worked correctly.

OCTAGRAM 11/3/2025||
There was unloved informatics in school and loved informatics at home. Unloved informatics consisted of graph flow optimizations. Loved informatics consisted of EGA programming and IRQ interrupt handling for multiple keypress detection and other stuff. Both informatics were in Turbo Pascal, but in sport olympiads going to interrupts or assembler was prohibited. Not that it was going to help, but… when olympiads end, I was going those doors again, and others did not. For others my loved informatics was door remaining shut.

20 years later it is an excercize to find a device where loved EGA programming tricks work. Only unloved informatics remained

int_19h 11/3/2025|
86Box is what you want for this kind of nostalgic programming, comrade.

Our teachers didn't know much about this stuff in school. The origin of my username here (and elsewhere) is from those classes at school; I once submitted an assignment that, under certain conditions, used inline asm in Turbo Pascal to do "INT 19h". Had to explain it later, but thankfully that particular teacher was more amused than offended.

userbinator 11/2/2025||
This was, and for some purposes still is, one of the most useful documentation sets for the PC architecture. It's worth noting that Ralf himself isn't a specialist low-level programmer, as this came from an era when there was a far smaller divide between users, power users, and developers.
wvenable 11/3/2025||
For those way to young to even know what this is, it's basically like MDN web documentation but for the DOS era. It was a community-maintained API reference for IBM PC hardware, DOS operating system, and other software.
aforwardslash 10/26/2025||
Oh the memories :) I still have somewhere a dot-matrix printed copy of the list I used religiously in the 90's
peterfirefly 10/26/2025|
I remember looking at a print out of some of it in the late 80's and learning about the "list of lists", the critical section flag, and the alternate stack.
notorandit 11/3/2025||
I too have spent hours of assembly code on PC hardware. My freshly downloaded copy of the interrupt list has always been at my (virtual) side when designing tests or libraries.

I think that has been one of the very first and largest information collection shared for free on the internet.

Kudos to Ralf Brown and whoever participated in keeping the list compete, accurate and timely.

AndrewStephens 11/2/2025||
This was invaluable when I was tasked with writing a stay-resident boot loader just after the turn of the century. Even then, such information was considered arcane and Ralf Browns Interrupt List was much better than any official documentation I could find.
kazinator 11/4/2025||
I wonder how things were done in this thing: https://en.wikipedia.org/wiki/Sun386i

Was that DOS emulation running some real DOS that though it was invoking BIOS calls?

According to a HN submission 3 years ago, evidently, Peter Norton once wrote a book on the 386i:

https://www.amazon.co.uk/exec/obidos/ASIN/0136616127/ref%3Dn...

gblargg 11/3/2025||
HTML version if you're just curious about what it looks like (all the links on the linked site seem to be zip files).

https://www.ctyme.com/rbrown.htm

whizzter 11/2/2025|
Many hours spent reading this even if I was quite late to the party.
More comments...