OSDev
http://osdev.su/

Загрузка с флешки
http://osdev.su/viewtopic.php?f=6&t=455
Страница 3 из 13

Автор:  Станислав [ 13 ноя 2011, 06:09 ]
Заголовок сообщения:  Re: Загрузка с флешки

pavia писал(а):
0. Вначале элементарную ОС.
* Цель этой ОС определить непрерывный кусок памяти и загрузить элементарную программу в память. И передать её управления.
** Первичный загрузчик он грузит вторичный из файловой системы.
*** В отдельном файле должна быть элементарная программа "Здравствуй мир!"
1. Стадия ДОСа. Или ОС используемой в микро контролёре. Или UNIX.


Я хочу вначале всетаки установить видеорежим, посмотреть сколько свободной видео памяти, её можно забить картинками значков, кнопок, изображений. И залить на экран картинку текст отрисовать, значки нарисовать, кнопки.
Потом решить проблему с файловой системой.
Организовать функцию сообшений: от клавиатуры, мышки, таймера, сообшение отрисовки окошка для загружаемых программ.
При отрисовки объекта на экране в дополнительный байт пикселя заношу номер этого объекта, объекты все в обшем массиве, а по номеру объекта получаю тип объекта кнопка или картинка. По нажатии мышки смотрится координата пикселя и там номер объекта на который нажали, ему и пойдет сообщение. Также будет переменная активного объекта ему будет сыпаться с клавиатуры сообщения. Устанавливается активный объект также нажатием мышки или табуляцией с клавиатуры.
Ведь программа это просто загруженный код в оперативную память, нужно правильно его функции вызывать когда нужно.

А потом на эту систему набивать разные функции работы с дисками, сетью, в виде драйверов или ещё как.
Есть функция быстрой отрисовки шрифтов, свой векторный редактор шрифтов из кривой бизье. Быстро закрашиваются и хорошо сглажены. Хочю их рисовать на Fasme и через весу.
Но в фасме не силен пока вот и спрашиваю как память длинную получить, видео память получить, и т.д.

Автор:  pavia [ 13 ноя 2011, 10:12 ]
Заголовок сообщения:  Re: Загрузка с флешки

Цитата:
Я хочу вначале всетаки установить видеорежим, посмотреть сколько свободной видео памяти, её можно забить картинками значков, кнопок, изображений. И залить на экран картинку текст отрисовать, значки нарисовать, кнопки.
Хотеть ты можешь многого, но так не выйдет.
Установить видео режим не трудно. Но перед тем как ты его установишь тебе нужна посмотреть доступные режимы и для отладки тебе уже требуется вывод строк.
Но смотри установил ты видео режим. Далее что ты будешь делать? Для отладки тебе надо выводить данные, значит нужны шрифты. Можно воспользоваться готовыми, но они 8х8 что мелковато и русский не поддерживают. А для загрузки своих надо поддержка ФС.
Также для отладки тебе надо обрабатывать клавиатуру. Таймер нужен только в качестве сторожевого чтобы восстанавливать порядок если программа вдруг зависнет.

Цитата:
Организовать функцию сообшений: от клавиатуры, мышки, таймера, сообшение отрисовки окошка для загружаемых программ.
Очереди потом, но функцию чтения клавиш достаточно первична.

Цитата:
Но в фасме не силен пока вот и спрашиваю как память длинную получить, видео память получить, и т.д.

Сейчас ты нечего не умеешь. Даже если я тебе расскажу всю теорию создания ОС ты не сможешь ими воспользоваться. У тебя будет куча ошибок и ты будешь во всех их утопать. Как в рассказе:
Хвост поднял нос увяз. Нос поднял хвост увяз. Хвост поднял ...
Поэтому не надо спешить и делать всё сразу делай постепенно. Начни с изучения нужных тебе технологий.
Во-первых перезаписывать флешку перезагружать компьютер это долго. Возьми ДОС и начни с него. Есть borland C++ или Borland pascal с отличной средой для программирования и отладки. Для ассемблера есть tasm и turbo debuger.

Автор:  Станислав [ 13 ноя 2011, 11:10 ]
Заголовок сообщения:  Re: Загрузка с флешки

pavia писал(а):
Поэтому не надо спешить и делать всё сразу делай постепенно. Начни с изучения нужных тебе технологий.
Во-первых перезаписывать флешку перезагружать компьютер это долго. Возьми ДОС и начни с него. Есть borland C++ или Borland pascal с отличной средой для программирования и отладки. Для ассемблера есть tasm и turbo debuger.



У меня уже всё написано на tasm на pascal на Delphi, всё работает!!!!!!!!!!!!!!!!. Осталось на fasm перенести.
1Гружусь с флешки.
2Подгружаемый файл получает LFB
3Перехожу в длинный режим там загружаю основные данные с флешки посекторно (для этого не нужна файловая система)в память которые не будут меняться на протяжении всей работы(для этого не нужен диспетчер памяти),
рисую кое что на экране.
Мечтаю об этом пока

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

Автор:  pavia [ 13 ноя 2011, 12:34 ]
Заголовок сообщения:  Re: Загрузка с флешки

Цитата:
У меня уже всё написано на tasm на pascal на Delphi, всё работает!!!!!!!!!!!!!!!!. Осталось на fasm перенести.

А зачем на FASM всё переписывать?

У меня сделано так.
Есть MBR, BootSector, load.exe, kernel.exe
MBR загружает BootSector
BootSector разбирает FAT и загружает load.exe разбирает таблицу релоков.
load.exe определяет доступную память через int 15h, загружает kernel.exe, выбирает видео режим vesa, настраивает защищенный режим.
kernel.exe должен загружать основные программы.


MBR написан на TASM, формат файла BIN
BootSector написан на TASM, формат файла BIN
Load.exe написан на BorlanPascal, формат файла EXE-MZ
Kernel.exe написан на Delphi, Формат файла EXE-PE

Автор:  phantom-84 [ 13 ноя 2011, 13:31 ]
Заголовок сообщения:  Re: Загрузка с флешки

Станислав писал(а):
При отрисовки объекта на экране в дополнительный байт пикселя заношу номер этого объекта, объекты все в обшем массиве, а по номеру объекта получаю тип объекта кнопка или картинка. По нажатии мышки смотрится координата пикселя и там номер объекта на который нажали, ему и пойдет сообщение. Также будет переменная активного объекта ему будет сыпаться с клавиатуры сообщения. Устанавливается активный объект также нажатием мышки или табуляцией с клавиатуры.
Знаешь, что такое Z-порядок? Не во всех режимах есть "дополнительный байт пикселя", к тому же GUI от железа нужно отделять. Не забудь про переменную объекта, захватившего мышь.

pavia писал(а):
Очереди потом, но функцию чтения клавиш достаточно первична.
Функция чтения клавиш и будет читать очередь.

Станислав писал(а):
Перехожу в длинный режим там загружаю основные данные с флешки...
Я тоже об этом мечтаю :)

Автор:  Станислав [ 13 ноя 2011, 17:00 ]
Заголовок сообщения:  Re: Загрузка с флешки

pavia писал(а):
MBR написан на TASM, формат файла BIN
BootSector написан на TASM, формат файла BIN
Load.exe написан на BorlanPascal, формат файла EXE-MZ
Kernel.exe написан на Delphi, Формат файла EXE-PE


Есть на тасм пример перехода в реальный режим и как раз получения LFB в режиме 800 на 600 32бит с весой, правдо без перебора режимов, и рисовка пикселя цветного в память LFB (то что нужно) но не могу его загрузить после загрузчика, о чем собственно и просил помоч в самом начале!!! У меня сектор читается откуда угодно но не с флешки

В паскале есть многое Там могу делать все, что угодно, но почемуто регистры edx, eax не работают.
В дельфи тоже могу всё делать, но как компилировать в нем бинарники(чистый код?)

Автор:  Станислав [ 13 ноя 2011, 17:10 ]
Заголовок сообщения:  Re: Загрузка с флешки

phantom-84 писал(а):
Функция чтения клавиш и будет читать очередь.


Это как?

Про Z Буфер знаю всё. С объектами может получиться интересно, любая программа добавляет в объекты свои и операционка работает с ними как с родными, взять может из массива любой чюжой объект или системный и исправить его или копировать себе, будет это кнопка иконка или картинка... .У меня уже руки чешутся.

Автор:  phantom-84 [ 13 ноя 2011, 19:44 ]
Заголовок сообщения:  Re: Загрузка с флешки

Станислав писал(а):
Это как?
Как положено. Будет выбирать из очереди только сообщения, относящиеся к клавиатуре (речь о консольном режиме работы).

Автор:  pavia [ 13 ноя 2011, 21:36 ]
Заголовок сообщения:  Re: Загрузка с флешки

Цитата:
У меня сектор читается откуда угодно но не с флешки

У меня есть загрузочная флешка. Ей пользуюсь не так давно пару лет, но на тех машинах что пробовал грузилась без проблем. Код не мой. Свой я ещё массово не тестировал, но на виртуалке он работал.
Так вот на флешке mbr используется int 13h функция ah=02
Так что почему у вас не работает я не знаю. По пробуйте на другом компьютере.
Флешка может быть от форматирована под мягкую дискету или под жесткий диск. Но обычно под жёсткий.
Так что загрузка с флешки не отличается от загрузки с жёсткого. В интернете полно статей по этому поводу.


Цитата:
В паскале есть многое Там могу делать все, что угодно, но почемуто регистры edx, eax не работают.

Это по тому что DOS создавался, когда процессор был 16 битным. И паскаль поэтому был 16 битным. Поэтому тут нет ничего удивительного. Но можно поступить так на tasm можно использовать 32 битные регистры. можно скомпилировать obj файл и подключить к паскалю. Директива {$L LOADER.OBJ} .

Цитата:
В дельфи тоже могу всё делать, но как компилировать в нем бинарники(чистый код?)

При помощи замены системных библиотек на пустые. В интернете описано.

Код:
unit SysInit;
interface
var
  TlsIndex: Integer;         
  TlsLast: Byte;
  PtrToNil: Pointer = nil;
procedure _InitExe;
implementation
procedure _InitExe;
asm
end;
end.


Код:
unit System;
{$H-,I-,S-,L-}
interface

type
  PGUID = ^TGUID;
  TGUID = record
    D1: Cardinal;
    D2: Word;
    D3: Word;
    D4: array[0..7] of Byte;
  end;
  PWideString = ^WideString;

var IsConsole : Boolean;
    RandSeed:integer;

procedure _Halt0;
procedure _HandleFinally;


implementation

uses sysinit;

procedure _Halt0;
asm
end;

procedure       _HandleFinally;
asm
end;

end.


А да из system выкинуто много нужного, но вернуть легко.
Сборка идёт так.
Код:
..\tool\delphi\DCC32.EXE  -Y -B .\system\system.pas
..\tool\delphi\DCC32.EXE  -GD -W- -$H-  -U".\system"    kernel.dpr 

Первая строчка компилирует системную библиотеку, вторая ядро с новой системной библиотекой.

В паскале я тоже системные библиотеки заменяю.
Нужен SYSTEM.TPS


Код:
unit System;

{ This is a dummy system unit, which does almost nothing. }

{$R-,S-,Q-,I-,N-,E-}

interface

var                              { TP needs a public var & const block }
  static_var  : byte;
const
  const_var   : byte = 0;

implementation

{ These routines must be declared in the right order (the compiler calls
  them by number, not by name) and must be far.  In the TP 6.0 SYSTEM.TPU there
  are 137 of them; buy the RTL source if you want to know what they do.  Coding
  the other 134 stubs would be a good idea, but I couldn't be bothered. }

procedure InitTurbo; far; assembler;
asm
  push dx
  mov dx, seg(const_var)
  mov ds,dx                { Load DS }
  pop dx

  mov al,const_var         { We have to be sure the var's & const's get linked in }
  mov static_var,al
end;

procedure HaltError; far; assembler;
asm
end;

procedure HaltTurbo; far; assembler;
asm
end;

end.

Компилируется вмести с подключенными системными символами символы автоматом подключаются.
В TURBO.TPL заменяется system.TPU при помощи TPUMOVER.EXE

Код:
bpc system.pas
TPUMOVER.EXE TURBO.TPL  -SYSTEM
TPUMOVER.EXE TURBO.TPL  +SYSTEM

Автор:  pavia [ 13 ноя 2011, 21:38 ]
Заголовок сообщения:  Re: Загрузка с флешки

Станислав писал(а):
phantom-84 писал(а):
Функция чтения клавиш и будет читать очередь.


Это как?

Про Z Буфер знаю всё.

Фантом писал не про Z-буфер, а про Z-порядок(алгоритм художника).

Страница 3 из 13 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/