> man operating_systems
Модераторы: Roman I Khimov, Wanderer, Dron
Автор Добавил
v4567
Понедельник 26.05.2008 23:48
ID пользователя #1067
Зарегистрирован: Понедельник 26.05.2008 23:15
Сообщений: 18
Здравствуйте форумчане.
Помогите разобраться написал свой загрузчик но он почемуто не работает. Загрузчик записываю в первый сектор нулевого цилиндра на дискете, загружаюсь с неё. Далее информация с дискеты читается на аппаратном уровне, на уровне биоса, тоесть никакой файловой системы на ней нет, а информацию с неё читаю используя 13 прерывание и 2 функцию биоса, тоесть по секторам, цилиндрам и головкам.
Данная программа читает информацию с шести цилиндров и передаёт управление дальним прыжком в другой сегмент оперативной памяти с нулевым смещением, куда и были считаны данные.
Далее привожу текст программы:

; zagr.asm - Загрузчик.


cseg segment para 'code'

org 100h

begin proc near

assume cs:cseg, ds:cseg, ss:cseg

org 7c00h
jmp start
start:

cli
push ax
push dx
push cx
push bx
push es
mov ax,cs
mov ds,ax

;--------------Сброс дисковой системы.--------------------

mov cx,3d
pov:
mov ah,0h
mov dl,0h
int 13h
cmp ah,0h
jz povtor1
loop pov
pop es
pop bx
pop cx
pop dx
pop ax
sti

;--------------Чтение с дискеты.--------------------------

povtor1:
mov ax,1117h
mov es,ax
mov ch,0h
mov ah,2h
mov al,8d
mov cl,2h
mov dh,0h
mov dl,0h
mov bx,0h
int 13h
gdem:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
cmp ah,0h
jz pr
jmp gdem
pr:
cmp al,8h
jz pr1
jmp gdem
pr1:
mov ch,0h
pr4:
mov ah,2h
mov al,9d
mov cl,1h
not dh
mov dl,0h
int 13h
gdem1:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
cmp ah,0h
jz pr2
jmp gdem1
pr2:
cmp al,9h
jz pr3
jmp gdem1
pr3:
cmp [zil],0h
jz pr6
jmp pr7
pr6:
not [zil]
jmp pr4
pr7:
not [zil]
inc ch
cmp ch,6d
jz pr5
jmp pr4
pr5:
pop es
pop bx
pop cx
pop dx
pop ax
jmp dword ptr [perex]

perex dd 11170000h
zil db 0h

begin endp
cseg ends
end begin

Данный загрузчик не работает, кто имеет опыт в написании загрузчиков помогите пожалуйста, за ответ заранее благодарен.
Наверх
Dron
Понедельник 26.05.2008 23:59


ID пользователя #13
Зарегистрирован: Понедельник 05.07.2004 11:16
Местонахождение: Москва
Сообщений: 651
Что пишет?

Помоему вопрос поставлен некорректно...

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

Андрей Валяев
Наверх
Сайт
v4567
Вторник 27.05.2008 00:05
ID пользователя #1067
Зарегистрирован: Понедельник 26.05.2008 23:15
Сообщений: 18
Почему вопрос поставлен некорректно?
Наверх
Dron
Вторник 27.05.2008 10:54


ID пользователя #13
Зарегистрирован: Понедельник 05.07.2004 11:16
Местонахождение: Москва
Сообщений: 651
Ну расскажи для начала как ты установил что он не работает... где ты его проверял?

Просто вываливать в форум код с вопросом - где у меня здесь ошибка? - это крайне несерьезно.

[ Редактирование Вторник 27.05.2008 10:55 ]

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

Андрей Валяев
Наверх
Сайт
v4567
Вторник 27.05.2008 12:06
ID пользователя #1067
Зарегистрирован: Понедельник 26.05.2008 23:15
Сообщений: 18
Написал программу которая загружает свои шрифты в знакогенерато, 256 символов анлийские и русские буквы, потом после загрузки шрифтов она выводит их на экран при нажатии на клавиши. Сделал обработку нажатия только нескольких клавиш без переключения русских и английских букв, выводит только русские буквы.
Получилось так что сама программа вместе со шрифтами занимает 4,7 кбайта. Вначале я написал загрузчик который загружал всё что было на дискете начиная со второго сектора по девятый нулевого цилиндра нулевой головки и всё. С размерами я просчитался т.к. сектор у меня 512 байт, получается 512*8=4,096кбайт программа невлазила полностью но при этом работала, тоесть я использовал перебор начиная с 128 символа по 142 символ, если же я брал при нажатии на какую нибудь клавишу символо в конце таблици например 240 она уже не работала, тоесть таблица загружалась не полностью.
Как прочитал я в одной книге при использовании 13 прерывания функии 2 биос необходимо загружать в регистры следующие данные:
AH функция 02h
AL число считываемых секторов 8
CH номер цилиндра 0
CL номер начального сектора 2
DH головка 0
DL нисковод 0 - флопик
ES BX буфер куда считывать 0000h:7e00h
так вот если в BX записываю 0 тоже всё работает хотя не должно.
А если записываю программу на 1 дорожку дискеты тоесть
AH 02h
AL 9
CH 0
CL 1
DH 1
DL 0
ES:BX 0000h:7e00h
то ничего не работает, так же не работает если считываю несколько цилиндров.
Из выше сказанного я заключи что ошибка гдето в загрузчике, но может я ошибаюсь.
Наверх
Dron
Вторник 27.05.2008 16:58


ID пользователя #13
Зарегистрирован: Понедельник 05.07.2004 11:16
Местонахождение: Москва
Сообщений: 651
По докумментации рыца лень, но помоему эта функция не читает между границами дорожек... 9 секторов это случаем не больше чем размер дорожки? Я уже забыл какая геометрия у флопика.

С другой стороны читай по секторам 9 раз. это не намного сложнее, но зато вернее.

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

Андрей Валяев
Наверх
Сайт
ossadchy
Вторник 03.06.2008 17:12
ID пользователя #941
Зарегистрирован: Среда 10.10.2007 22:55
Местонахождение: Украина, Николаевская обл., г. Первомайск
Сообщений: 181
1. кому надо флопик уже -- он исключен еще из PC 99 стандарта
2. кому надо писать загрузчики -- берем GRUB, LILO, загрузчик FreeBSD и наслаждаемся
3. да, читать лучше по секторам, хотя учитывая первые два пункта.. )
Наверх
Сайт
 

Перейти:     Наверх

Транслировать сообщения этой темы: rss 0.92 Транслировать сообщения этой темы: rss 2.0 Транслировать сообщения этой темы: RDF
Powered by e107 Forum System

© OSRC.info, 2004-2010.
Авторские права на любые материалы, авторы которых явно указаны, принадлежат их авторам. По вопросам публикации таких материалов обращайтесь к авторам.
Авторские права на любые другие материалы принадлежат OSRC.info.
Сайт является помещением библиотеки. Копирование, сохранение на жестком диске или иной способ сохранения произведений осуществляются пользователями на свой риск.
При использовании материалов сайта ссылка на OSRC.info обязательна.