83Plus:Software:usb8x/Asm Interface/MSD
Mass Storage Driver Assembly Interface
The mass storage driver works through a series of U_CALL entry points, much like the HID driver.
It requires two RAM buffers, one for internal use and one for a sector buffer. File handles used for opened files (explained later) also require around 27 bytes. The size of all three of these buffers can be obtained through the MSDVersion U_CALL. The size of the internal buffer is typically 254 bytes and the sector buffer is 512 bytes.
The entry point which requires these buffers is the MSD_Initialize U_CALL. Its memory can be dynamically allocated to appBackUpScreen (taking up practically all of it) with the code below:
U_CALL MSDVersion ld de,appBackUpScreen push de add hl,de ex de,hl pop hl U_CALL MSD_Initialize
For file system operations, you will then make calls to UFI_Initialize and FAT_Initialize. All entry points will return with the carry flag set if there are problems, with more detailed information in offErrorCode.
If all three of these U_CALLs succeed, the following entry points can then be called.
Entry Points
MSDVersion | Gets mass storage driver version and memory requirements |
MSD_Initialize | Initializes mass storage driver |
UFI_Initialize | Initializes connected mass storage device for sector read/write operations |
UFI_Read | Reads sector at (MSDLBA) address into sector buffer |
UFI_Write | Writes memory in sector buffer to (MSDLBA) address |
FAT_Initialize | Initializes connected mass storage device for FAT16 file system operations |
DOS_openFile | Opens a file and populates file handle with important information |
DOS_fileSeek | Sets seek pointer for file handle to specified offset |
DOS_fileRead | Read bytes from a file |
DOS_fileWrite | Write bytes to a file and grow if necessary |
DOS_createFile | Create new file in specified directory with size 0 |
DOS_createDirectory | Create new subdirectory in specified directory |
DOS_renameFileEntry | Rename specified file or folder |
DOS_deleteFileEntry | Delete file or folder (including contents) |
DOS_countFilesInDir | Get number of files/folders in specified directory |
DOS_getNextFile | Get first/next file in specified directory |
DOS_getFileSize | Get size of file |
DOS_getDirEntry | Get directory entry for specified file/folder |
FAT_nameConvertTo11 | Convert name to 11-character format (ex. "README TXT") |
FAT_nameConvertFrom11 | Convert name to ASCIIZ format (ex. "readme.txt") |
FAT_lookupPath | Find whether specified file/directory exists |
FAT_findFileInCluster | Get directory entry for a file in specified folder |
FAT_getStartingCluster | Get starting cluster of specified directory |