nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 19 Apr 2024 08:47



Reply to topic  [ 11 posts ] 
FLOPPY загрузчик для IBM PC 
Author Message
Banned

Joined: 12 Oct 2006 16:44
Posts: 608
Reply with quote
В этом топике я вкратце расскажу о том как написать дискетный загрузчик для
IBM PC-совместимого компа[писюк]. Вначале немножко о мифах и реальностях.

Большинство программистов(особенно пишущих только на языке высокого уровня)
считают, что приложения могут работать только под управлением какой-либо
операционной системы[ось]. Будь то линух, форточки, дос -
все они обеспечивают набор системных функций для приложения.
Их строгое утверждение - "Приложение без оси работать НЕ будет" я и
попытаюсь здесь разрушить! Итак поехали...

1) Что происходит при включении писюка?
Как только нажимается кнопка Power - начинает работать программа, прошитая
во FLASH микросхемы памяти. Эта программа инициализирует начальную
программную среду - настраивает вектора прерываний, сегменты кода/стека/данных
и прочего. Следует отметить, что CPU находится в реальном режиме со всеми
вытекающими из него последствиями... Далее идёт Power On Self Test[пост],
который включает в себя - проверку перифералов на маме и
внешних(звуковуха/видео итд итп...). А также производится настройка
перифералов (режимы/адреса памяти/порты... бла, бла, бла короче...
И самое интересное наступает дальше - определяется с чего будет
идти продолжение программы. Если в CMOS Setup выбран первичный девайс загрузки-
флоппи-диск[дискета], то продолжение программы берётся с дискеты.

2) И всё-таки что-же дальше?
А дальше биосом считывается НУЛЕВОЙ сектор дискеты. Главное: сектор размером
всего-навсего 512 байт + содержимое этого сектора грузится в оперативу по
адресу 0x7C00 и передаётся управление туда!

3) И что-же делать?
Далее поступают следующим образом. Если приложение объёмом менее 512 байт,
то его можно просто исполнить. Только следует иметь ввиду, что в исходном
тексте программы должнна быть установлена директива "ORG 0x7C00", иначе
все адреса данных съедут! Вот например Turbo Assembler фирмы Борлянд[тасм] НЕ
поддерживает такую директиву и ориентирован на ДОС-ком-файлы, у которых
"ORG 0x100". Поэтому прийдётся извращаца - к каждому адресу данных прибавлять
число (0x7C00-0x100), что ОЧЕНЬ неудобно! Это только одно из обстоятельств,
которое побудило меня забить на тасм и поставить себе Flat Assembler[фасм]
Кроме того, тасм не позволяет получать бинарники с разными режимами адресации
"CODE16"+"CODE32" одновременно! А пользоваться префиксами 0x66 и 0x67 меня
осто*б*н*ло в своё время. А фасм всё это может - позволяя рожать бинарники,
не привязанные к конкретной оси. Плюс кроме файла fasm.exe больше
ничё не надо! В отличие от тасма, который требовал ещё и линкер...
Кроме того, фасм позволяет включать в проекты бинарники
(incbin "бинарник"), чего тасм не сделает!
Надеюсь, что с'агитировал фасм здесь очень хорошо :)
Поехали далее... Приложению можно делать всё что угодно - управлять
CPU и перифералами как вздумается + лезть по любым портам/адресам! Можно вызывать
прерывания BIOS! Про прерывания DOS,EMS,HIMEM и прочее - ЗАБУДЬТЕ!!! Их нет.
Можно писать также свои обработчики прерывания :)
...


13 Feb 2007 22:04
Profile
Banned

Joined: 12 Oct 2006 16:44
Posts: 608
Reply with quote
...
4) Как быть если требуется загрузить программу бОльших размеров?
Для этого можно написать загрузчик[лоадер], который грузил сектора дискеты, на
которых записано приложение по конкретному адресу оперативы. Далее просто делать
переход на этот адрес. И приложение запустится :))) Надеюсь порадовал!
Проблема выбора адресов - можно смело загружать по адресам: 0x7000...0x9000
Никаких биосов там нет. Далее идёт видеопамять 0xA000, итд... Хотя для каждого
писюка наверное по-разному...

Таковы вот реалии железа писюка! И всё без осей ;)

Перейдём к практической части. Долго распыляться не буду - расскажу что и где.
1) BootFlop.exe-программа,позволяющая записать лоадер+приложение на дискету.
2) BootFlop.com-сам лоадер. Должен быть всегда рядом с BootFlop.exe! Он
записывается на нулевой сектор дискеты.
3) Game.com - приложение(игра). Располагается на дискете с первого по... сектор.
Управление - Enter/Esc/влево/вправо/Ctrl/Alt. Очень весело и угарно :)
В своё время писал на Борлянд Паскале, потом портировал на тасм.
4) Ink.com - ещё одно приложение. Использует 32-битный РЕАЛЬНЫЙ режим. Пример
того чё в форточках напрямую не сделаешь!
5) Stretch.com - ищё одно приложение. Писалось мной на Sphinx C--(начальная версия
от Селика, не Шейкеровская). Ради прикола портировалась на фасм. Играется с
регистрами VGA-адаптера...

Как протащиться?
1) Поставьте на писюке в CMOS Setup первичную загрузку с дискеты!
2) Возьмите любую 3.5-дюймовую исправную дискету. Снимите защиту от стирания!
3) Форматировать и чистить не обязательно! Вставьте в флоповод.
4) Рядом с BootFlop.exe должны лежать BootFlop.com и приложение,
которое хотите загружать лоадером.
5) Все файлы должны быть без атрибута "Read Only" и иметь имена в
фомате 8.3(капризы доса и борлянда)
6) Под форточками или досом запустить BootFlop.exe
7) Нажать Enter, далее следовать инструкциям программы BootFlop.exe
8) Проделать все операции и убедиться в их успешном завершении(программа всё пишет!)
9) Ребутнуть писюк
10) И наконец - смотреть результаты!

Требования к приложениям.
1) Формат - досовский COM-файл. С "ORG 0x100" (оставил для совместимости с
дос-ассемблерами: тасм, масм,...)
2) Недопустимо использовать дос-прерывания и прерывания всех драйверов итп...
3) Разрешается вызывать прерывания BIOS
4) Максимальный размер программыы: (0x10000-0x100) байт

Надеюсь понравилось! :)
Жду отзывов -как хороших, так и... критики...


13 Feb 2007 22:05
Profile
Banned

Joined: 12 Oct 2006 16:44
Posts: 608
Reply with quote
Загрузчик, приложения, исходники здесь:
http://www.nedopc.org/nedopc/upload/BOOT.rar


13 Feb 2007 22:07
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22543
Location: Silicon Valley
Reply with quote
Post 
А nasm чем тебе не угодил?

_________________
:dj: https://mastodon.social/@Shaos


13 Feb 2007 22:48
Profile WWW
Banned

Joined: 12 Oct 2006 16:44
Posts: 608
Reply with quote
Post 
Shaos wrote:
А nasm чем тебе не угодил?


Как ни пытался его скачать в инете - ничё не вышло - не нашёл я его в своё время! За компанию тогда и wasm надо вспомнить :)


13 Feb 2007 23:01
Profile
Novelist
User avatar

Joined: 10 Jan 2006 07:54
Posts: 49
Location: St.Petersburg, Russian
Reply with quote
Post 
Shaos wrote:
А nasm чем тебе не угодил?


Я для такого пользуюсь pacific C фирмы hitech software.
Асм маздай адназначна.

_________________
--
[ZX]


17 Feb 2007 14:43
Profile ICQ YIM WWW
Banned

Joined: 12 Oct 2006 16:44
Posts: 608
Reply with quote
Post 
fk0 wrote:
Я для такого пользуюсь pacific C фирмы hitech software.
Асм маздай адназначна.


из всех известных мне Сей, самый высокооптимизированный Sphinx C--
мне удавалось программу размером 1 байт писать - одна инструкция ret. Есть ещё борлянд Си - но то воще отстой. Про другие не знаю и толково судить не берусь.

А счёт асма - жил и будет жить! Никуда от него не деться. Да и в некоторых случаях он даже лучше С


17 Feb 2007 17:30
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22543
Location: Silicon Valley
Reply with quote
Romanich wrote:
Загрузчик, приложения, исходники здесь:
http://www.nedopc.org/nedopc/upload/BOOT.rar


А диск он делает нечитаемым. Было бы прикольно поддержать FAT12 ;)

Кстати у меня game.com на досовском ноуте не пошёл - см. скрин:

Image

И журчание какое-то странное из колонок доносилося.

Вот ink.com заработал:

Image

stretch.com вроде тоже:

Image

Кстати ink.com почему-то отказывается работать из под доса - сразу выходит, а две другие программы ведут себя также как и при запуске с диска (т.е. game.com глючит, а stretch.com растягивает лягушку).

_________________
:dj: https://mastodon.social/@Shaos


17 Feb 2007 21:53
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22543
Location: Silicon Valley
Reply with quote
Post 
Я помнится на пятом курсе (1995 год) за двухлитровую бутылку пива и коробку пятидюймовых дискет (если ничего не путаю) делал одногрупникам курсач с аналогичной функциональностью - с дискеты грузилась бут-программка которая через биос писала переливающийся разными цветами текст :kruto:

Программка писалась впопыхах в день сдачи - препод весёлый попался, поняв что они не рубят предложил им на выбор - "уд" либо отдаться воле случая и запустить преподовскую программку выдающую случайное число от 2 до 5 с некоторой вероятностью - один из них вроде даже "хорошо" получил таким способом :lol:

P.S. Я в своей реинкарнации NedoPC SDK в варианте для PC планирую вовсе не использовать досовские функции - вариант с бутом с диска будет там очень кстати ;)

_________________
:dj: https://mastodon.social/@Shaos


17 Feb 2007 21:59
Profile WWW
Banned

Joined: 12 Oct 2006 16:44
Posts: 608
Reply with quote
Shaos wrote:
А диск он делает нечитаемым. Было бы прикольно поддержать FAT12 ;)

используется ПРЯМАЯ запись на сектора дискеты. Поэтому файло-сканеры отдыхают :)

Shaos wrote:
Кстати у меня game.com на досовском ноуте не пошёл - см. скрин:

у тебя карточка наверно не nVidia'вская. Я оптимизировал VESA-функцию 05h (переключение банков). А то через int 10h безбожно тормозило бы! Есть вариант под S3-карты ещё... Дизассемблировал видео-биос - листание банков делается всего ОДНИМ регистром(недокументирован) - в десятки раз быстрее чем при вызове прерывания

Shaos wrote:
И журчание какое-то странное из колонок доносилося.

Игра юзает Adlib (I/O 0x388 или 0x220). Есть озвучка ;) Глючно-смешная правда...

Shaos wrote:
Кстати ink.com почему-то отказывается работать из под доса - сразу выходит

Под окнами не идёт! Нужно нулевое-кольцо! Либо чистый ДОС(без EMM,Himem) от загрузочной дискеты 98-й винды. Возможны проблемы при переходе в плоский режим CPU (но это навряд-ли)

Shaos wrote:
stretch.com растягивает лягушку)

так задумано


17 Feb 2007 22:49
Profile
Banned

Joined: 12 Oct 2006 16:44
Posts: 608
Reply with quote
Post 
вот исчо программы собственного изготовления (только уже на C--)
http://www.nedopc.org/nedopc/upload/COM.rar


18 Feb 2007 20:03
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 11 posts ] 

Who is online

Users browsing this forum: No registered users and 7 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.