OSDev

для всех
Текущее время: 24 авг 2025, 02:34

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 131 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8 ... 14  След.
Автор Сообщение
 Заголовок сообщения: Re: Файловая система для флешки
СообщениеДобавлено: 15 окт 2008, 22:42 
Нашел интересный код. Правда он не работает (да еще вроде и под windows). Поможете исправить и портировать под linux gcc?

struct disk_packet //needed for int13 42h
{
BYTE size_pack; //size of packet must be 16 or 16+
BYTE reserved1; //reserved
BYTE no_of_blocks; //nof blocks for transfer
BYTE reserved2; //reserved
WORD offset; //offset address
WORD segment; //segment address
DWORD lba1;
DWORD lba2;
} disk_pack;

void LBASectorRead(void *buffer, unsigned long lba )
{
unsigned char bError = 0;
disk_pack.size_pack=16; //set size to 16
disk_pack.no_of_blocks=1; //1 block ie read one sector
disk_pack.reserved1=0; //reserved word
disk_pack.reserved2=0; //reserved word
disk_pack.segment=FP_SEG(buffer); //segment of buffer
disk_pack.offset=FP_OFF(buffer); //offset of buffer
disk_pack.lba1=0; //lba first 32 bits
disk_pack.lba2=0; //last 32 bit address

_asm
{
mov dl, 80h;
mov [disk_pack.segment], ds;
mov si, disk_pack;
mov ah, 42h;
int 13h
jc NoError ; //No error, ignore error code
mov bError, ah ; // Error, get the error code
NoError:
}

printf( "%d", bError);

}

int main(void)
{
static unsigned char currentMBR[SECTOR_SIZE] = {0};
printf("\n\n");
LBASectorRead(currentMBR );
PrintSector(currentMBR); //function to print buffer in hex
}


Вернуться к началу
  
 
 Заголовок сообщения: Re: Файловая система для флешки
СообщениеДобавлено: 17 окт 2008, 01:06 
Вот написал код на NASM'е. Он компилится, но почему-то не линкуется...

section .data

msg_error db "Error!"

dap:
packet_size db 10h
reserved db 00h
N_SEC dw 01h
buff_seg dw 00h
buff_off dw buff
X_SEC dd 0
dd 0

section .bss

buff resb 512

section .text

global _start

_start:

mov ah, 42h
mov dl, 80h
mov si, dap
int 13h
jc _error
jmp _exit

_exit:

mov eax, 1
mov ebx, 0
int 80h

_error:

mov eax, 4
mov ebx, 0
mov ecx, msg_error
mov edx, 6
int 80h
jmp _exit


Вернуться к началу
  
 
 Заголовок сообщения: Re^2: Файловая система для флешки
СообщениеДобавлено: 17 окт 2008, 07:26 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1209
Бред. Прерывания BIOS в программе под Линукс.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Файловая система для флешки
СообщениеДобавлено: 17 окт 2008, 10:20 
Хм, а как мне проверить работоспособность кода? В mbr кидать?


Вернуться к началу
  
 
 Заголовок сообщения: Re^2: Файловая система для флешки
СообщениеДобавлено: 17 окт 2008, 13:03 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Так тебе нужна программа под Linux или под BIOS? Ты зря думаешь, что из любой ОС можно вызывать функции от совершенно другой ОС.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Файловая система для флешки
СообщениеДобавлено: 17 окт 2008, 19:23 
Под BIOS надо... Вообще мне нужно написать функцию на асме для чтения сектора в режиме LBA и вызывать ее на C.


Вернуться к началу
  
 
 Заголовок сообщения: Re^2: Файловая система для флешки
СообщениеДобавлено: 17 окт 2008, 22:09 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Тогда программу придётся записывать в загрузочный сектор. Только не в самый первый сектор (где находится MBR), а BOOT-сетор раздела (номер сектора берётся из MBR). Сектор MBR предназначен только для менджера загрузок, типа GRUB, для ОС использовать нельзя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re^3: Файловая система для флешки
СообщениеДобавлено: 18 окт 2008, 10:04 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1209
Можно и в MBR, если с диска кроме данного кода не предполагается грузить что-то еще. Только не повреди таблицу разделов! Кроме того не обязательно записывать в загрузочный сектор вообще. Можно "подложить" образ сектора с программой, например, ntldr'у.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Файловая система для флешки
СообщениеДобавлено: 18 окт 2008, 14:06 
А ntldr'у multibut spicifications не нужны?

З.Ы. Так че за ошибку линкер выбивает? Никак не пойму...


Вернуться к началу
  
 
 Заголовок сообщения: Re: Файловая система для флешки
СообщениеДобавлено: 18 окт 2008, 16:35 
Вот, переписал. Записал в mbr - выдает на экран "ee". Что это значит? В коде же нет такого. Как проверить, что данные считаны верно?

section .data

dap:
packet_size db 10h
reserved db 00h
N_SEC dw 01h
buff_seg dw 00h
buff_off dw buff
X_SEC dd 0
dd 0

section .bss

buff resb 512

section .text

global _start

_start:

mov ah, 42h
mov dl, 80h
mov si, dap
int 13h
jc _error

_error:

mov al, 0x65
call _kputchar

_kputchar:
pusha
mov ah, 0x0E
int 0x10
popa
ret


Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 131 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8 ... 14  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB