Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2008, 08:38   #11
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Вот выкладываю все что у меня есть ну и новое ядро. Клава работает и экран в 85x20 в текстовом режиме. Ну значит можно тогда попробывать начать работу, например с винтом ? Правда, когда читал статьи разные почему то упомянулось, что через порты не всегда может все сработать. Как вы думаите ? p.s. и опять такие нужны прерывания
Вложения
Тип файла: zip PlusSRC.zip (26.1 Кб, 278 просмотров)
BOBAH13 вне форума Ответить с цитированием
Старый 22.08.2008, 19:55   #12
drRobert
Пользователь
 
Аватар для drRobert
 
Регистрация: 07.08.2008
Сообщений: 33
По умолчанию

Йопта, парень =)) Напросился

Извращенцем посвящается или как приписюлить к ОС прерывания БИОС

1. Зная, что положение обработчика БИОС-прерывания определяется его вектором (указателем на точку входа в обработчик), размер вектора равен 4 байта и вектора расположены в памяти последовательно начиная с 0х00000000, думаю не составит труда выяснить адрес конкретного обработчика.

2. Берём эмулятор (qemu подойдёт) и делаем дамп памяти с этого места. Сохраняем.

3. Дизасемблируем (А шо, у кого-то езь исходники БИОС-прерываний? - Делитесь.) сию весчь как 16-битный код. Уже хорошо, да?

4. Шаманим и переделываем под 32-битный код защищенного режима. Тут множество нюансов. К примеру, дальние прыжки. Допустим, нашли jmp 00ff:0fff. В защищенном режиме 00ff воспримется не как часть адреса, а как селектор. Правим.

5. Не дай Боже в обработчике встретим инструкцию вида int x - Шаг 1.

6. Утрём пот со лба, вознесём богам молитвы и дальше.. Теперь надо чтобы по инструкции int x в зашишенном режиме генерилось не исключение, а наше прерывание. А по возникновении ошибки, исключительной ситуации, наоборот. Вот тут вопрос об определении, как было сгенерированно прерывание, аппаратно или программно..

ВЫВОД: На <мужскую хениталию> вам фонарик на солнечных батарейках за 10000$?


Прерывания обязательны, но аппаратные, а не программные. Нажата клавиша - на те прерывание (СИГНАЛ, если так будет яснее). В ответ уже писюлишь реакцию на нажатие, капишь? Программные прерывания возникают по инструкции int и есть ни что иное, как извращенный вызов процедуры (вот API чем вас не устраивает?).
Ещё раз грю, забей! Делай пока получается - не получается что-то конкретное - пешы, разберёмся. Всё железо прийдётся программировать через порты.
Вот список книг, которые я посоветовал бы почитать на эту тему
М. Гук, Аппаратные средства IBM PC
В. Несвижский, Программирование аппаратных средств в Windows
В. Кулаков, Программирование на аппаратном уровне. Специальный справочник.
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..."
(с) Б.Г.
drRobert вне форума Ответить с цитированием
Старый 23.08.2008, 10:33   #13
drRobert
Пользователь
 
Аватар для drRobert
 
Регистрация: 07.08.2008
Сообщений: 33
По умолчанию

Впечатлило, правда на qemu не запустилось, так что надо пробовать на нескольких реальных компах и соответственно минимизировать асм-код как машиноспецифичный. GDT нужна будет другая, большего размера - для размещения дескипторов TSS, LDT, шлюзов задач и др. приблуд - ну это уж потом. Для клавы не плохо было бы организовать буфер (хотя бы на базе линейного статического массива), а так - очень даже кавайно

Накропал немного кода по bios32. Вот только примеров практического приложения окромя pci bios пока не нашёл. Покопаюсь в нете.
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..."
(с) Б.Г.

Последний раз редактировалось drRobert; 23.08.2008 в 10:35.
drRobert вне форума Ответить с цитированием
Старый 23.08.2008, 11:37   #14
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

В смыслк
Цитата:
Для клавы не плохо было бы организовать буфер
зачем, чтот я не пойму ? Ну а щас даже незнаю что можно реализовать Если не вызывать прерывания bios для работы с дисками то как читать и писать головки, цилиндры, сектора ?
BOBAH13 вне форума Ответить с цитированием
Старый 23.08.2008, 11:50   #15
drRobert
Пользователь
 
Аватар для drRobert
 
Регистрация: 07.08.2008
Сообщений: 33
По умолчанию

Цитата:
Если не вызывать прерывания bios для работы с дисками то как читать и писать головки, цилиндры, сектора ?
I/O-ports, батенька , I/O-ports. вот работающий пример чтения флоппа.. От сердца отрываю, в смысле от своей оськи =)))
Код:
// 3,5" FDD-Drive 80:2:18 CHS
#include ".\ioports.h"
#include ".\dma.h"

#define reserved1 0x3f0
#define SRB       0x3f1  
#define DOR       0x3f2
#define TDR       0x3f3
#define MSR       0x3f4
#define DSR       0x3f4
#define FIFO      0x3f5
#define reserved2 0x3f6
#define DIR       0x3f7
#define CCR       0x3f7

#define FD_TRANSF_RATE_500   0x00  //500kbits/s
#define FD_TRANSF_RATE_300   0x01  //300kbits/s
#define FD_TRANSF_RATE_250   0x02  //250kbits/s

struct CHS
{
       unsigned char C;
       unsigned char H;
       unsigned char S;
};

void FDD_motor_on_off(unsigned char Floppy, unsigned char NewMotorState);
int FDD_readsect_dma(unsigned char Floppy, unsigned char C, unsigned char H, unsigned char S, int *Destination);
void FDD_wait();

void FDD_motor_on_off(unsigned char Floppy, unsigned char NewMotorState)    
{
     (NewMotorState<<4)<<Floppy;
     outportb(DOR, inportb(DOR) | NewMotorState);
     return;
};

void FDD_wait()
{while (!(inportb(MSR) & 0x80)) {}};

int FDD_readsect_dma(unsigned char Floppy, unsigned char C, unsigned char H, unsigned char S, int *Destination)
{
     //#define FD_DOR_NONREST       0x4 //Controller enabled /* FIXME */ ???
 outportb(DOR,0); //reset
 outportb(DOR, inportb(DOR) | 0x8); //enable DMA
 FDD_motor_on_off(Floppy,1);
 FDD_wait();
 outportb(CCR,FD_TRANSF_RATE_500);
 FDD_wait();
 // DMA
 outportb(DMA_CMD_RESET_TR,0);
 outportb(DMA_CMD_MOD,DMA_MOD_FLOPPY+DMA_MOD_WRITE+DMA_MOD_ONCE);
 outportb(DMA_ADDR_CHANEL2,0x00);
 outportb(DMA_ADDR_CHANEL2,0x10); //0x1000
 outportb(DMA_SEGM_CHANEL2,0x00);
 outportb(DMA_COUNT_CHANEL2,0xff);
 outportb(DMA_COUNT_CHANEL2,0x01); //511
 outportb(DMA_CMD_MASK,DMA_MASK_CHANEL2);

 outportb(FIFO,0x6 | 0x40 | 0x20);
 outportb(FIFO,Floppy);
 outportb(FIFO,C);
 outportb(FIFO,H);
 outportb(FIFO,S);
 outportb(FIFO,2); //sect. size (128*2^x)
 outportb(FIFO,0xf);
 outportb(FIFO,0x54); //GAP
 outportb(FIFO,0xff);
 FDD_wait();
  
 char temp=inportb(FIFO);
 int i;
 for (i=0; i<6; i++) {inportb(FIFO);}
 FDD_motor_on_off(Floppy,0);
 if (temp & 0xc0) return -1;
 int *source=0x1000;
 for (i=0; i<128; i++) {Destination[i]=source[i];}

 return 0;
};
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..."
(с) Б.Г.
drRobert вне форума Ответить с цитированием
Старый 23.08.2008, 11:57   #16
drRobert
Пользователь
 
Аватар для drRobert
 
Регистрация: 07.08.2008
Сообщений: 33
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
В смыслк зачем, чтот я не пойму ?
Шибко обрабатыватся буде? А во вторых, от клавы могут быть не только сообщения о нажатии, но и об отпускании и по-нормальному - добавлять их в очередь. Приложение будет смотреть её, выбирать нужные сообщения и по своему обрабатывать - тестовый редактор печатать, игра - перемещение персонажа. Ну это к примеру.
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..."
(с) Б.Г.
drRobert вне форума Ответить с цитированием
Старый 23.08.2008, 13:00   #17
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Я думаю сделать system.h в котором например

Код:
struct {
    unsigned int msg;
    unsigned short size;
    unsigned int data;
} _msg_stack;
Но для этого надо будет написать эллокатор памяти которого еще нет у меня. Т.е. оргинизовать работу с памятью. Честно говоря, мне хочется работать в сторону чего то нового, а не копировать то, что уже делают последнии 40 лет Идея с классами ( писал проги под Symbian, так как раз классы ) мне более симпатична. Все организованно, чем выше класс в иерархии тем больше у него привелегий. И так можно сделать типа сигнала ( тоже сообщение ) всем классам которые его ждут ( были раннее у этого класса-сигнала зарегестрированы ). Только вот как классы в си организовать )) чет я не пойму.. это же надо переходить на с++ ( я на все 100% не силен в сях и в с++ ). Подправь если что
BOBAH13 вне форума Ответить с цитированием
Старый 23.08.2008, 13:08   #18
drRobert
Пользователь
 
Аватар для drRobert
 
Регистрация: 07.08.2008
Сообщений: 33
По умолчанию

Э-э-э.. Тут ещё кто езь? Ых.. Разумеется аллокатор памяти прийдётся писать. Память - ресурс, а управление ресурсами - одна из фундаментальных задач ос. Задачу запустить - надо выделить под неё память, файл прочитать - то же самое.. Как ни крутись, а попа сзади (вернее у тебя она ещё впереди =)) ). С классами советую не заморачиваться - во всяком случае сейчас, "пощупай" архитектуру: защ. режим, страничную адресацию, многозадачность, а потом уже с багажом знаний можно будет более основательно подойти к вопросам реализации.
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..."
(с) Б.Г.
drRobert вне форума Ответить с цитированием
Старый 22.09.2008, 16:02   #19
annakin
Новичок
Джуниор
 
Регистрация: 21.09.2008
Сообщений: 1
По умолчанию

Ребята идея конешно хорошая, я както тоже пыталса в это вникнуть потом нарвался на один проэкт адрес сайта не помнюю но вот название ресурса ReactOS там кстате реализовываетса ОС с нуля и там уже есть продвижения есть исходный код самой системы полностью. Так что качайте и втыкайте )))
annakin вне форума Ответить с цитированием
Старый 19.05.2009, 22:32   #20
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Глупый наверно вопрос но все же:
чем отличается img от простого бинарника и какой утилитой воспользоватся для создания img если я пишу на FASM?
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объявление собственной глобальной процедуры Gorin Общие вопросы Delphi 11 06.11.2007 17:49
РАЗРАБОТКА DLL Leo Общие вопросы Delphi 2 26.10.2007 21:35
Разработка протокола OrdJONY Общие вопросы по программированию, компьютерный форум 2 04.10.2007 13:21