/* * libcaca Colour ASCII-Art library * Copyright (c) 2006 Sam Hocevar * 2009 Jean-Yves Lamoureux * All Rights Reserved * * This library is free software. It comes without any warranty, to * the extent permitted by applicable law. You can redistribute it * and/or modify it under the terms of the Do What The Fuck You Want * To Public License, Version 2, as published by Sam Hocevar. See * http://sam.zoy.org/wtfpl/COPYING for more details. */ #include "kernel.h" #include "klibc.h" #include "floppy.h" int floppy_get_info(struct floppy_info *floppy_info) { outb(0x70, 0x10); unsigned char c = inb(0x71); int a = c >> 4; int b = c & 0xF; char *drive_type[6] = { "none", "360kb 5.25in", "1.2mb 5.25in", "720kb 3.5in", "1.44mb 3.5in", "2.88mb 3.5in" }; memcpy(floppy_info->drive[0].type, drive_type[a], strlen(drive_type[a]) + 1); memcpy(floppy_info->drive[1].type, drive_type[b], strlen(drive_type[b]) + 1); floppy_info->count = 0; if (a != 0) floppy_info->count++; if (b != 0) floppy_info->count++; return 0; } void floppy_print_info(struct floppy_info *floppy_info) { printf("%d floppy drive(s)\n", floppy_info->count); if (floppy_info->count) { printf("Floppy %d type %s\n", 0, floppy_info->drive[0].type); if (floppy_info->count == 2) { printf("Floppy %d type %s\n", 1, floppy_info->drive[1].type); } } } int floppy_get_status(void) { unsigned char c = inb(0x1F7); return c; }