Вообще варианта два: самый правильный и самый простой. 1. Самый правильный: написать первичный загрузчик для CD, анализирующий CDFS и загружающий com-файл, создавая для него соответствующее окружение (стартовый внутрисегментный адрес 100h, стек в вершине этого же сегмента, после которого образ файла в памяти может быть и продолжен, хотя здесь соглашением можно и пренебречь - проще и удобнее расположить стек перед образом файла в памяти, если выбранный для него адрес загрузки (линейный) позволяет). 2. Самый простой: воспользоваться тем фактом, что стандарт загрузки с CD позволяет иметь достаточно большой бут-блок (0FFFFh 512-байтовых секторов, реально в пределах всей доступной базовой памяти, начиная с позиции 7C00h). Т.е. можно весь образ com-файла сделать "первичным загрузчиком", чтобы его загрузила непосредственно BIOS, а окружение com-файла сформировать позиционно независимым кодом, расположенным непосредственно в начале файла. Размер образа лучше сделать кратным не 512 байтам, а 2 кб, и сигнатуру 0AA55h разместить не только в конце образа, но и под первой 512-байтовой отметкой. Code (Text): org 100h xor bx, bx cli mov ss, bx mov sp, 7C00h sti jmp 7B0h:@f @@: ... rb 2FEh-$ dw 0AA55h ... rb 7FFh - ($-0FFh) mod 800h dw 0AA55h Edited. Если компоновщик позволяет собрать com-файл с отличным от 100h стартовым смещением, то все становится еще проще.
Хорошо, а как все теперь записать на диск? можешь более подробно по шагах ро сказать? вот аська напиши сюда если не трудно 437803640
не ну как я понимаю, напишем мы первичный загрузчик СД, но ведь это вообщем простой файл *.сом если его записать на диск то он запишется как и все другие файлы.... хорошо и в конце этого загрузчика можна писать свою программу? иль он ее сам запустит,хотя как я не понимаю мы ведь имя ее не указали((??
Доброго времени суток! У вас должен получиться обычный двоичный файл (не СОМ), который запишите в неро как загрузочный диск (если быть точнее - используете вместо образа дискеты ДОСа). Посмотрите материал по ссылке: http://www.lowlevel.ru/?namespace=osdev8
Представьте шахматную доску, там 62 клетки. Одна фигура стоит на углу шахматной доски, ее нужно провести через все клетки не повторяясь (1 раз в одной клетке) в другой угол доски (угол который находиться на против по диагонали). Ходить можно только линейно, т.е. хоть по одной клетки, но только прямо влево, вправо, по диагонали нельзя. ПОМОГИТЕ ПОЖАЛУЙСТА!!!
Отформатировать RW в Nero и вписать нужный дамп hex-эдитором в нужный сектор ;- ? P.S. Остап к тому времени знал только один ход: 226,228... это я про шахматы =)
Ну если в big-endian, тогда да XshStasX, ничего не хотите делать сами!.. Вам, видимо, подойдет "самый простой способ" (шаблон исходника с комментариями прилагается - см. выше). К примеру в Nero выбираешь Bootable CD/DVD и далее в настройках: Image file - твой com-файл Enable expert settings - yes Kind of emulation - no emulation Segment - 7C0 (hex) Number of loaded sectors - размер твоего com-файла в 512-байтных секторах
а я и не знал что com-file можно в качестве img указать! хотя и говорят что com - это кусок кода без формата, но всёж не дискеты образ... любопытно, пригодиться спасибо! --- стал записывать gentoo.iso ох уж эти незнакомые проги, никогда в Alcohol не писал раньше, тут он мне выдал такое, что обнаружен DVD Recorder и типа если вы нажмёте Yes то он запишет... а если нажмёте No то он запишет типа тоже 0_o А ещё когда всё покатило, я указал скорость 4x минимально, а в логе он зафиксировал, что типа 4x нелегальная скорость и было измененно на 1x, хотя он на самом деле за пару сек прожёг! дурдом! =)