Areas where 2.0 is not compatible with previous versions of the DOS. + Direct calls to the BIOS Any program which jumped directly to the BIOS by way of the jump table at 40:0 will no longer work. + FAT pointer calls Programs which used system calls 27 and 28 to get a pointer to the FAT will no longer work. Because the FAT is now cached with other disk resources, there is no fixed location in memory to pass the address of. The calls still exist, however, and have the same format. THEY CAN ONLY BE USED TO GET THE FAT ID BYTE. On return ES:BX points to a FAT ID BYTE for the Drive. Doing anything except READing this ONE byte will probably crash the system. In order to get at the FAT, programs will first call DSKRESET (call 13) to flush out any dirty buffers, and then make a GETDPB call (call 31 or 50) to find out which sector on the disk the FAT starts at, how big it is, and how many copies of it there are. Then INT 25H and INT 26H can be used to transfer the FAT in and out of the programs memory space. + INT 25H and INT 26H In order for the above to work, and in order to maintain some order in the world of multi-surface disks, it is required that INT 25H and 26H use the MSDOS sector mapping rather than some rather arbitrary head-cylinder-sector mapping. The following subroutine will read the fat into the area of memory specified by DS:BX. DL contains the drive number, DL=0 means read the fat from the default drive, DL=1 indicates read from drive A:, and so on. getfat: push bx ; save pointer to fat area push ds mov ah,50 ; request the dpb int 21h mov cx,[bx+15] ; get fat sector count mov dx,[bx+6] ; first sector of fat pop ds ; restore fat area pointer pop bx mov al,dl ; is it the default drive? or al,al jnz driveok ; if not, load fat mov ah,19h ; ask for default drive int 21h ; get the default drive inc al ; map a=0 to a=1 driveok: dec al ; map a=1 to a=0 int 25h ; read the fat into DS:BX pop ax ; clean up the stack ret