FLOPPY загрузчик для IBM PC

16-битные ПЦ-совместимые компьютеры с процессорами 8086/8088/80286 работающие под управлением ДОС

Moderator: Shaos

Romanich
Banned
Posts: 608
Joined: 12 Oct 2006 16:44

FLOPPY загрузчик для IBM PC

Post by Romanich »

В этом топике я вкратце расскажу о том как написать дискетный загрузчик для
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 и прочее - ЗАБУДЬТЕ!!! Их нет.
Можно писать также свои обработчики прерывания :)
...
Romanich
Banned
Posts: 608
Joined: 12 Oct 2006 16:44

Re: FLOPPY загрузчик для IBM PC

Post by Romanich »

...
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) байт

Надеюсь понравилось! :)
Жду отзывов -как хороших, так и... критики...
Romanich
Banned
Posts: 608
Joined: 12 Oct 2006 16:44

Re: FLOPPY загрузчик для IBM PC

Post by Romanich »

Загрузчик, приложения, исходники здесь:
http://www.nedopc.org/nedopc/upload/BOOT.rar
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

А nasm чем тебе не угодил?
Я тут за главного - если что шлите мыло на me собака shaos точка net
Romanich
Banned
Posts: 608
Joined: 12 Oct 2006 16:44

Post by Romanich »

Shaos wrote:А nasm чем тебе не угодил?
Как ни пытался его скачать в инете - ничё не вышло - не нашёл я его в своё время! За компанию тогда и wasm надо вспомнить :)
User avatar
fk0
Novelist
Posts: 49
Joined: 10 Jan 2006 07:54
Location: St.Petersburg, Russian

Post by fk0 »

Shaos wrote:А nasm чем тебе не угодил?
Я для такого пользуюсь pacific C фирмы hitech software.
Асм маздай адназначна.
--
[ZX]
Romanich
Banned
Posts: 608
Joined: 12 Oct 2006 16:44

Post by Romanich »

fk0 wrote: Я для такого пользуюсь pacific C фирмы hitech software.
Асм маздай адназначна.
из всех известных мне Сей, самый высокооптимизированный Sphinx C--
мне удавалось программу размером 1 байт писать - одна инструкция ret. Есть ещё борлянд Си - но то воще отстой. Про другие не знаю и толково судить не берусь.

А счёт асма - жил и будет жить! Никуда от него не деться. Да и в некоторых случаях он даже лучше С
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: FLOPPY загрузчик для IBM PC

Post by Shaos »

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 растягивает лягушку).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Я помнится на пятом курсе (1995 год) за двухлитровую бутылку пива и коробку пятидюймовых дискет (если ничего не путаю) делал одногрупникам курсач с аналогичной функциональностью - с дискеты грузилась бут-программка которая через биос писала переливающийся разными цветами текст :kruto:

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

P.S. Я в своей реинкарнации NedoPC SDK в варианте для PC планирую вовсе не использовать досовские функции - вариант с бутом с диска будет там очень кстати ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
Romanich
Banned
Posts: 608
Joined: 12 Oct 2006 16:44

Re: FLOPPY загрузчик для IBM PC

Post by Romanich »

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 растягивает лягушку)
так задумано
Romanich
Banned
Posts: 608
Joined: 12 Oct 2006 16:44

Post by Romanich »

вот исчо программы собственного изготовления (только уже на C--)
http://www.nedopc.org/nedopc/upload/COM.rar