int test(int a, char** v){ /* la forma de ejecutar es qemu -kernel bin/kernel.bin -hda disk.img ** o tambien con -hda disk0.img que tiene cosas escritas parece y es mas facil ver cosas*/ char buffer2[512],buffer[512]; int i; for(i=0;i<512;i++){ buffer[i]='C'; } printf("\n"); ata_write(ATA0, buffer, 512, 1, 256); ata_read(ATA0, buffer2, 512, 1, 0); printf("lei esto\n"); for(i=0 ; i<512 ;i++){ printf("%c", buffer2[i]); } printf("\n"); ata_read(ATA0, buffer2, 512, 2, 0); printf("lei esto\n"); for(i=0 ; i<512 ;i++){ printf("%c", buffer2[i]); } return 0; }
uint32_t test1() { //ata_read(boot_start_lba,1,tmp,1); ata_write(boot_start_lba,1,(uint16_t *)&fat_boot,1); //ata_write(uint32_t start_sector, uint32_t num_sectors, uint16_t* buf, uint32_t byteswap) return 0;//fat[0x10];//__SWAP16(fat_boot.fat_size_sectors)* __SWAP16(fat_boot.sector_size); }
void write_file(char *name, uint8_t *buf, uint32_t len, fat_entry *dirinfo) { uint32_t num_clusters = fat16_bytes_to_cluster_size(len); uint32_t *clusters = (uint32_t*)malloc(num_clusters*sizeof(uint32_t)); get_free_clusters(clusters, num_clusters); //create an entry in the root dir int root_idx = get_free_root_dir_space(dirinfo); if(root_idx==-1) return; //no free space in rootdir.. fat_entry *entry = &dirinfo[root_idx]; memcpy(entry->filename,name,8); entry->filename_ext[0]= 'S'; entry->filename_ext[1]= 'A'; entry->filename_ext[2]= 'V'; entry->file_attrib = 0; entry->time_created_updated = 0; entry->date_created_updated = 0; entry->start_cluster = __SWAP16(clusters[0]); entry->file_size_bytes = __SWAP32(len); //update dirlist on disk int k; uint16_t *p = (uint16_t *)dirinfo; for(k=0;k<(((__SWAP16(fat_boot.root_dir_entries))*0x20)/512);k++) { ata_write(root_dir_start_lba+k,1,p,1); p+=256; } //ONLY WRITES ONE CLUSTER FOR NOW!! uint32_t cluster_offs = fat16_cluster_to_lba_offset(entry->start_cluster); for(k=0;k<fat16_get_file_lba_size(entry);k++) { ata_write(cluster_offs+k,1,(uint16_t *)buf,1); buf += 512; } //write FAT to disk p = &fat[0]; fat[clusters[0]] = 0xFFFF; //end of file for(k=0;k<((__SWAP16(fat_boot.fat_size_sectors)* __SWAP16(fat_boot.sector_size))/512);k++) { ata_write(fat_start_lba+k,1,p,1); p +=256; } }