OSDev

для всех
Текущее время: 27 апр 2024, 11:40

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




Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8 ... 13  След.
Автор Сообщение
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 21 ноя 2011, 10:17 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Предыдущий вариант пакета был правильный, просто нужно было использовать номер сектора 1, а не 2.

Размера 18 нет вообще. Кроме 16 есть размеры 18h, 1Сh и 20h, но тебе их использовать не нужно. Также в этот раз ты допустил ошибку в указателе: когда ты явно разделяешь указатель на два слова, то смещение находится в первом слове, а сегментный адрес во втором. Правильные варианты:
1) dd 8200h
2) dd 0:8200h
3) dw 8200h,0

Что касается номера сектора, то это поле всегда 64-разрядное, но если логически ты работаешь только с 32-разрядными номерами, то можно обнулить старшее двойное слово и больше его не менять, т.е. твой вариант подходит:
lba dd ?,0 ; в первое двойное слово записываешь нужный номер сектора


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 22 ноя 2011, 06:09 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
спосибо за мподсказку, всёровно не грузится, работаю пока в загрузчике, зато с весой и зашишеным режимом получается
узнаю LFB и другое, устанавливаю режим, перехожу в зашишеный режим, адрес LFB причем не смешается
закрашиваю фон, зацыкливаю на проверку клавиатуры.
Подскажите правильно ли я обхожусь с клавиатурой, нельзя перехватить вектор клавиатуры и как бы мне ешё мышку добавить через порты, у нее бывает и 5 кнопок, олесики, это с каждой в отдельности надо разбираться?
И еще подскажите, в ПМ режиме никак уже нельзя вызвать функции биус int10, int13
org 0x7C00
use16
start:
xor ax,ax
mov ds,ax
mov es,ax
mov ss,ax
mov sp,0x7C00

mov bx,4112h
mov ax,4f01h ;узнаем LFB режима 640:480:4
mov di,Mode_Info
mov cx,bx
int 10h

mov ax,4f02h ;установим режим
int 10h

cli
lgdt [gdtr]
mov eax, cr0
or al,0x1
mov cr0,eax
jmp 0x10: protected
use32



protected:
mov ax,0x8
mov ds,ax
mov es,ax
mov ss,ax
mov esp,0x7C00

cmp byte[ModeInfo_BitsPerPixel],32
jne ErrorStop

mov ebx,[clTeal]
call fill_screen

.wait:
in al, 64h ;считываем состояние
test al, 1h ;если 1 то нажата клавиша
jz .wait

in al, 60h ;скан-код нажатия получаем из порта 60

cmp al, 05h ;скан-код
je .fin
cmp al, 0bh ;скан-код
je .one
cmp al, 0ah ;скан-код
je .one
cmp al, 04h ;скан-код
je .one

jmp .wait

.fin:
mov ebx,[clLime]
call fill_screen
mov al,0
jmp .wait

.one:
mov ebx,[clFuchsia]
call fill_screen
mov al,0
jmp .wait

fill_screen:
mov edi,[ModeInfo_PhysBasePtr]

mov ecx,640*480
.next:
mov dword[edi],ebx
add edi,4
loop .next
ret

ErrorStop:
hlt
jmp $


gdt: dw 0x0000, 0x0000, 0x0000, 0x0000
sys_data: dw 0xFFFF, 0x0000, 0x9200, 0x00CF
sys_code: dw 0xFFFF, 0x0000, 0x9800, 0x00CF
gdt_end:

gdtr: dw gdt_end - gdt - 1
dd gdt

clFuchsia dd 00FF11FFh
clTeal dd 00888800h
clLime dd 0006FF06h


times 510- ($-start) db 0
dw 0xaa55


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 22 ноя 2011, 18:47 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Цитата:
И еще подскажите, в ПМ режиме никак уже нельзя вызвать функции биус int10, int13

Пока эмулятор реального режима не напишешь никак.

Цитата:
спосибо за мподсказку, всёровно не грузится,

Сделай вывод значений регистров которые передаёт биос при запуске MBR.
И покажи результаты.

Во вторых сделай чтение следующего сектора после MBR. И передай туда управление.
Надеюсь ты читаешь сектор не в видео память?
Код чтения приложи на форум.


Цитата:
Подскажите правильно ли я обхожусь с клавиатурой, нельзя перехватить вектор клавиатуры и как бы мне ешё мышку добавить через порты, у нее бывает и 5 кнопок, олесики, это с каждой в отдельности надо разбираться?

Клавиатуру не смотрел, но вот процедуры ты оформляешь неправильно. Прочитай про соглашения при вызовах процедур. Надо сохранять значения регистров, а ты это не делаешь. Параметры передаёшь не обще принятым способом. Потом запутаешься и ошибки будут.
Во вторых не бойся использовать стек и делать много процедур.

По поводу мышек. Их много разных и с каждой надо в отдельности. Но можно выделить два больших класса. PS/2 совместимые с майкрософт или IBM. И USB мыши. У USB протокол богатый, там одного драйвера хватит чтобы охватить всё разнообразие мышей в том числе и 5 кнопочных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 23 ноя 2011, 05:28 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
pavia писал(а):
Сделай вывод значений регистров которые передаёт биос при запуске MBR.
И покажи результаты.


Как

pavia писал(а):
Во вторых сделай чтение следующего сектора после MBR. И передай туда управление.
Надеюсь ты читаешь сектор не в видео память?
Код чтения приложи на форум.

Я уже как только не читал.
Сейчас думаю, а если перебрать значения dl диска и посмотреть функции получения информации о дисках и попробывать их прочитать, может они читаются?
Мнебы считать в память картинку фон закрасить, иконки, файлы шрифтов, библиотеки.
А как кстати заполнить память из реального режима которая после 1 метра.
Встречал пример заполнения из большова реального режима там доступны ф-и биус.
И пример чтения ATA через порты, кстати может после перехода в зашишеный режим читать винчестер через порты?
Если есть код по мышкам на асме, или определения дисков поделитесь, а то итак инет каждый день рою.
Khalizev@eml.ru
Или сбору векторов прерываний, с шин, портов, клавиатур, ...

В инете нашел исходники загрузчика который читает fat32!!!
В заголовках информации fat32 подставил данные своей флешки и он запустил файл на ней по указанному адресу
Сам файл был моим он выводил слово на экран.
Это слово высветилось. Я рад, буду в нем разбираться. Использует ф-ю чтения 42h


Последний раз редактировалось Станислав 23 ноя 2011, 12:56, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 23 ноя 2011, 08:27 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
реализавал проверку 10 дисков после 80h функцией INT 13 48h
занес в si, буфер Info и вывел на экран из него со смешением на 24h (там ASCIZ имя главной шины и ASCIZ имя-тип интерфейса)
результат был вывод двух дисков, флешки и один винт все правильно
pci usb
pci sata

может просто флешка заблокирована, есть функция
INT 13 – IBM/MS INT 13 Extensions – Блокировка/Разблокировка диска
AH = 45h
AL = операция
00h средства блокировки в диске
01h средство разблокировки
02h проверка статуса блокировки
DL = номер диск


проверить не получается на блокировку, в ah не 0
о круто я прочитал сектор с диска 81h, с винта, а флешка видемо заблокирована

на другом ноутбуке пишет pci usb pci ata pci usb Я туда еше флешку вставил помимо загрузочной


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 23 ноя 2011, 15:00 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Станислав писал(а):
В инете нашел исходники загрузчика который читает fat32!!!
В заголовках информации fat32 подставил данные своей флешки и он запустил файл на ней по указанному адресу
Сам файл был моим он выводил слово на экран.
Это слово высветилось. Я рад, буду в нем разбираться. Использует ф-ю чтения 42h
Чего и следовало ожидать, т.е. нету никакой мнимой блокировки, а просто ты допускаешь какую-то ошибку при чтении. Если дашь ссылку на загрузчик, я смогу прокомментировать его качество.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 23 ноя 2011, 15:14 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
phantom-84 писал(а):
Чего и следовало ожидать, т.е. нету никакой мнимой блокировки, а просто ты допускаешь какую-то ошибку при чтении. Если дашь ссылку на загрузчик, я смогу прокомментировать его качество.


В помоши его разбора не откажусь. Почему таже функция у меня не работает а у них работает????
Как бы мне выцепить работающую функцию чтения сектора от туда, вернее ф-я таже но почему она работает?
Мне нужно просто без файловой системы.

http://staskhalizev.narod.ru/BOOTF32.ASM
код чтения сектора в загрузчике
код поиска файла находится на втором секторе, т.е. он сначало его загружает а потом ишет файл.

Кстати после заполнения первых трёх секторов бинарником, флешка сразу становится форматированой
Копируем туда файл ggg (имя я уже подправил). Он будет запускаться в 0:600


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 23 ноя 2011, 18:11 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Станислав писал(а):
В помоши его разбора не откажусь. Почему таже функция у меня не работает а у них работает????
Как бы мне выцепить работающую функцию чтения сектора от туда, вернее ф-я таже но почему она работает?
Мне нужно просто без файловой системы.
Я тебе примерный алгоритм привел. В приведенном загрузчике делается то же самое. Только мне больше нравится использование самомодифицируемого кода для вызова одной из двух процедур чтения/подготовки параметров для чтения (readchs или readlba). Попробую собрать функцию чтения на основе кода моих загрузчиков. Или написать с нуля.

Цитата:
Кстати после заполнения первых трёх секторов бинарником, флешка сразу становится форматированой
НЕ ДЕЛАЙ ТАК. Правильный вариант такой: сначала форматируешь флешку, потом записываешь код загрузчика, оставив служебные поля BS такими, какими они были после форматирования (при необходимости откорректировав ссылку на FSInfo, см. далее). В приведенном загрузчике структура FSInfo описывается как часть загрузчика и размещается в третьем секторе раздела, но правильнее, когда эта структура остается в оригинальном виде, и наиболее типично, когда она размещается во втором секторе раздела (хотя лично мне тоже нравится вариант, когда код загрузчика размещается в первых двух секторах, а FSInfo - в третьем секторе). Но оставим пока FAT32.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 23 ноя 2011, 19:24 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Код:
include "edd.inc"

   org 7C00h

   xor bx,bx
   cli
   mov ss,bx
   mov sp,$$
   sti
   mov ds,bx
   jmp 0:@f
@@:
   label drive byte at $$-2
   push dx
   mov ah,41h
   mov bx,55AAh
   int 13h
   jc short @f
   cmp bx,0AA55h
   jne short @f
   shr cx,1
   jc short lba
@@:
   mov word [after-2],readchs-after
   mov ah,8
   pop dx
   push dx
   int 13h
   jc short error
   and cx,3Fh
   label spt word at $$-4
   push cx
   mov cl,dh
   inc cx
   label heads word at $$-6
   push cx
lba:
   mov ax,7E0h
   mov es,ax
   mov ax,1
   xor bx,bx
   call read
@@:
   hlt
   jmp short @b

; ax:bx - lba
; es - bufseg
read:
   mov dl,[drive]
   mov dh,5
@@:
   push bx
   push ax
   push dx
   call readlba
after:
   pop dx
   jc short reset
   pop ax
   pop bx
   ret
reset:
   push dx
   mov ah,0
   int 13h
   pop dx
   pop ax
   pop bx
   dec dh
   ja short @b
error:
   hlt
   jmp short error

; input: ax:bx - devident, bp - divisor
; output: ax:bx - quotient, dx - remainder
divide:
   xor dx,dx
   xchg ax,bx
   div bp
   xchg ax,bx
   div bp
   ret

; ax:bx - lba
; dl - drivenumber
readchs:
   mov ch,dl
   mov bp,[spt]
   call divide
   inc dx
   mov cl,dl
   mov bp,[heads]
   call divide
   and bx,bx
   jnz short error
   cmp ah,4
   jae short error
   mov dh,dl
   mov dl,ch
   mov ch,al
   ror ah,1
   ror ah,1
   or cl,ah
   mov ax,201h
   int 13h
   ret

; ax:bx - lba
; dl - drivenumber
readlba:
   xor cx,cx
   pop bp
   push cx
   push cx
   push bx
   push ax
   push es
   push cx
   mov cl,1
   push cx
   mov cl,DAPACK_SIZE
   push cx
   mov si,sp
   mov ah,42h
   push bp
   int 13h
   ret DAPACK_SIZE

   db 440-($-$$) dup 0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 24 ноя 2011, 05:58 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Блин вся ошибка заключалась в том, что первый номер сектора указывается со смешением 64
Из за этой фигни я столько времяни потерял блииииииииииииииииииииииииннннннннннннннннн

disk_address_packet:
db 16, 0
dw 1
dw next_stage, 0
dq 64 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!это был первый

Я в коде увидел когда пакет заполняется в номер первого сектора сначало идет какойто hidden_sectors потом к нему добавляют номет первого. Чертовы скрытые сектора
в сатавском диске их небыло, а в аташном помоему есть
Сейчас думаю перейти в длинный реальный режим и скопировать пару сотен секторов в верхнюю память
Из реального режима этого не сделать ни как?


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

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


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

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


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

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