On the first IBM PC INT 15h drove the cassette port. The AT reused the vector for everything new that did not fit elsewhere: services for memory above 1 MB, timing, the joystick, and hooks that the BIOS calls so that other software can watch what it does. Later machines kept adding functions, so what is available depends on the BIOS; an unknown function returns CF = 1, usually with AH = 86h (or 80h on some machines).

AHService
4Fhkeyboard intercept: called by INT 09h with each scan code
83hevent wait: set a flag after a time
84hjoystick
86hwait CX:DX microseconds
87hcopy a block to or from extended memory
88hsize of extended memory
89hswitch to protected mode
90h / 91hdevice busy / ready hooks for multitasking
C0hsystem configuration table
E8h (AX=E820h)memory map, on 386 and later BIOSes

The hooks work the other way round from the services: the BIOS calls INT 15h itself, and a program that hooks the vector gets a look first. The keyboard handler calls AH=4Fh with each scan code in AL, and a hook can change or swallow the key; the disk BIOS calls AH=90h before waiting for a drive so that a multitasker can run something else meanwhile. A hook passes everything it does not handle on to the old vector.

On an 8086 PC or XT there is little here: DOSBox-X's BIOS emulates an AT-class machine and has the functions above. Always test CF after the call before trusting a result.