I'm using an i686-elf-gcc
cross compiler to generate code to run in real-mode.
I'm trying to read a sector from my kernel. I know this is the location where my kernel is located, in the second sector, 0th drive, 0th track. It builds fine, but after I call read, sectors_read is still 0.
u8 status;u8 sectors_read;read(1, 0, 1, 0, 0, status, sectors_read);kprint("STATUS: ");hex_to_ascii(status, num_str_buffer);kprint(num_str_buffer);kprint("\nSECTORS READ: ");num_str_buffer[0] = '\0';hex_to_ascii(sectors_read, num_str_buffer);kprint(num_str_buffer);
void read(u8 sector_size, u8 track, u8 sector, u8 head, u8 drive, u8 status, u8 sectors_read){ asm volatile("mov $2, %AH"); asm volatile("mov %0, %%AL" : : "r"(sector_size) : ); asm volatile("mov %0, %%CH" : : "r"(track) : ); asm volatile("mov %0, %%CL" : : "r"(sector) : ); asm volatile("mov %0, %%DH" : : "r"(head)); asm volatile("mov %0, %%DL" : : "r"(drive)); asm volatile("int $0x13"); asm volatile("mov %%AH, %0":"=r"(status) : ); asm volatile("mov %%AL, %0":"=r"(sectors_read) : );}