Index: branches/rewrite/i386/modules/BiosDisk/include/Disk.hpp =================================================================== --- branches/rewrite/i386/modules/BiosDisk/include/Disk.hpp (revision 1083) +++ branches/rewrite/i386/modules/BiosDisk/include/Disk.hpp (revision 1084) @@ -17,7 +17,8 @@ virtual IOReturn Read(UInt64 sector, UInt64 size, UInt8* buffer) = 0; virtual IOReturn Write(UInt64 sector, UInt64 size, UInt8* buffer) = 0; - virtual bool isValid() { return mName != NULL && mBytesPerSector; }; + virtual bool isValid() { return mName != NULL && mBytesPerSector; }; + virtual UInt32 bytesPerSector() { return mBytesPerSector; }; protected: const char *mName; const char *mBusType; Index: branches/rewrite/i386/modules/BiosDisk/Main.cpp =================================================================== --- branches/rewrite/i386/modules/BiosDisk/Main.cpp (revision 1083) +++ branches/rewrite/i386/modules/BiosDisk/Main.cpp (revision 1084) @@ -14,10 +14,18 @@ void BiosDisk_start() { + UInt8* mbr = (UInt8*)malloc(512); + BiosDisk* disk = new BiosDisk("bios:/hd0/"); + disk->Read(0, 1, mbr); + printf("mbr[0] = 0x%X\n", mbr[0]); + printf("mbr[510] = 0x%X\n", mbr[510]); + printf("mbr[511] = 0x%X\n", mbr[511]); printf("This is a simple BootDisk_start test.\n"); delete disk; + + halt(); } \ No newline at end of file Index: branches/rewrite/i386/modules/BiosDisk/BiosDisk.cpp =================================================================== --- branches/rewrite/i386/modules/BiosDisk/BiosDisk.cpp (revision 1083) +++ branches/rewrite/i386/modules/BiosDisk/BiosDisk.cpp (revision 1084) @@ -96,20 +96,35 @@ IOReturn BiosDisk::Read(UInt64 sector, UInt64 size, UInt8* buffer) { if(!isValid()) return kIOReturnNoDevice; - return kIOReturnSuccess; + + // Assume EBIOS capable for now... + if(EBIOSRead(sector, size) == 0) + { + bcopy((void*)BIOS_ADDR, buffer, size * mBytesPerSector); + return kIOReturnSuccess; + } + else return kIOReturnIOError; } IOReturn BiosDisk::Write(UInt64 sector, UInt64 size, UInt8* buffer) { + if(!isValid()) return kIOReturnNoDevice; - return kIOReturnNotWritable; + + bcopy(buffer, (void*)BIOS_ADDR, size * mBytesPerSector); + + if(EBIOSWrite(sector, size) == 0) + { + return kIOReturnSuccess; + } + else return kIOReturnIOError; } UInt8 BiosDisk::BIOSRead(UInt16 cylinder, UInt8 head, UInt8 sector, UInt8 count) { - if(sector == 0) return -1; + sector++; // starts at 1 biosBuf_t bb; int i;