diff --git a/src/Home/LimineHDD.ZC b/src/Home/LimineHDD.ZC new file mode 100755 index 00000000..f465c1c2 --- /dev/null +++ b/src/Home/LimineHDD.ZC @@ -0,0 +1,60 @@ + +#include "/Boot/Limine-HDD.HH" + +class CLimineStage2Header +{ + U16 size_a; + U16 size_b; + U32 location_a; + U32 location_b; +} + +DocMax; + +Dump(binary_limine_hdd_bin_data + 0x1A4); + +CLimineStage2Header *limine_stage2 = binary_limine_hdd_bin_data + 0x1A4; + +ClassRep(limine_stage2); + +U16 limine_stage2_size = sizeof(binary_limine_hdd_bin_data) - 512; +U16 limine_stage2_sectors = (limine_stage2_size + (512 - 1)) / 512; +U16 limine_stage2_sectors_size = (limine_stage2_sectors / 2) * 512; + +limine_stage2->size_a = limine_stage2_sectors_size + (512 * (limine_stage2->size_a % 2)); +limine_stage2->size_b = limine_stage2_sectors_size; +limine_stage2->location_a = 512; +limine_stage2->location_b = 512 + limine_stage2->size_a; + +limine_stage2->size_a = EndianU16(limine_stage2->size_a); +limine_stage2->size_b = EndianU16(limine_stage2->size_b); +limine_stage2->location_a = EndianU32(limine_stage2->location_a); +limine_stage2->location_b = EndianU32(limine_stage2->location_b); + +ClassRep(limine_stage2); +Dump(binary_limine_hdd_bin_data + 0x1A4); + +CBlkDev *bd = Letter2BlkDev('c'); + +U8 buffer[2000*16]; +MemSet(buffer, 0, BLK_SIZE); +AHCIAtaBlksRead(bd, buffer, 0, 1); +"\n\n\n\n"; +Dump(buffer, BLK_SIZE); +"\n\n\n\n"; + +MemSet(buffer, 0, BLK_SIZE); +MemCopy(buffer, binary_limine_hdd_bin_data, 512); +MemCopy(buffer + 512, binary_limine_hdd_bin_data + 512, limine_stage2_sectors_size); +MemCopy(buffer + 512 + limine_stage2_sectors_size, binary_limine_hdd_bin_data + 512 + limine_stage2_sectors_size, limine_stage2_sectors_size); +Dump(buffer, 2000*16); +"\n\n\n\n"; +AHCIAtaBlksWrite(bd, buffer, 0, (sizeof(binary_limine_hdd_bin_data)/512) + 4); +MemSet(buffer, 0, BLK_SIZE); +AHCIAtaBlksRead(bd, buffer, 0, 1); +"\n\n\n\n"; +Dump(buffer, BLK_SIZE); +"\n\n\n\n"; + + + \ No newline at end of file