eXeL@B —› Программирование —› махинации со старыми осями |
Посл.ответ | Сообщение |
|
Создано: 30 января 2010 13:59 · Личное сообщение · #1 На Васме эта тема умерла, все советуют готовые решения в виде загрузчиков, а душа к ним не лежит У меня вознила такая идея поставить Win95 на С WinME на D и написать прогу под дос реального режима которая бы вызывала загрузку линолеума с D имея такую прогу я добавил для нее пру строк в autoexec.bat и config.sys чтоб в загрузочном меню от Win95 появился бы пункт запуска линолеума. От слов к делу - для начала я попробовал из дос режима Win95 вызвать повторную загрузку системы с диска C однако все повисло. Ниже приведен листинг моей проги. Я думаю что нужно сменить некоторые вектора прерываний которые контролируются DOS для управления компьютером вопрос только какие ? ;=======[ SEGMENT ]=============================== OS_sector_1\ SEGMENT AT 7C0h ; 0000h:7C00h sector_1\ DB 512 DUP (?) OS_sector_1\ ENDS ;=======[ SEGMENT ]=============================== OS_boot\ SEGMENT AT 0 ORG 7C00h Boot_start\ LABEL FAR OS_boot\ ENDS ;=======[ SEGMENT ]=============================== LBR_CODE\ SEGMENT PARA PUBLIC 'CODE' start: mov AX,CS mov DS,AX mov AX,OS_sector_1 mov ES,AX int 19h mov AL,'C' sub AL,'A' mov CX,-1 lea BX,INT25h_data int 25h xor AX,AX mov DS,AX mov ES,AX mov BX,0400h cli mov SS,AX mov SP,BX sti jmp Boot_start mov AH,4Ch int 21h INT25h_data label byte DWORD 0h WORD 1h DWORD Boot_start LBR_CODE\ ENDS ;=======[ SEGMENT ]=============================== LBR_STACK\ SEGMENT PARA STACK 'STACK' BYTE 512 dup (?) LBR_STACK\ ENDS END start щас изучаю int 13h чтоб записать на дискету загрузчик который мне отмониторит состояние векторов прерываний на момент холодного старта ... а уж потом сравнив с тем что есть в досе принять решение о дальнейших маневрах |
|
Создано: 30 января 2010 14:02 · Поправил: SemDJ · Личное сообщение · #2 |
|
Создано: 30 января 2010 14:14 · Поправил: Rockphorr · Личное сообщение · #3 |
|
Создано: 01 февраля 2010 22:49 · Личное сообщение · #4 Rockphorr пишет: напиши прогу которая не просто выгрузит XP а еще после передаст управление на твой кодиначе замечание ниочем Ваша цель именно это сделать или иметь гибкий загрузчик. Перезагрузка в ХП уже реализована, осталось только повторить. Что касается начального загрузчика - берете GRUB4DOS и я думаю, что там все найдете. Имеются исходники, так что можете изучать как и что. По поводу загрузки Линукса из под ДОС - syslinux, прекрасно все делает и тоже с исходниками. |
|
Создано: 01 февраля 2010 23:23 · Личное сообщение · #5 также могу порекомендовать загрузчик актуальные на данный момент сорсы: ----- EnJoy! |
|
Создано: 01 февраля 2010 23:35 · Личное сообщение · #6 |
|
Создано: 02 февраля 2010 06:52 · Личное сообщение · #7 Rockphorr пишет: добавить в загрузчик кусок кода с диалогом и продолжением загрузки с любого указанного раздела задача достаточно тривиальная Тогда зачем вы говорите про теплый и холодный рестарт - это понятия БИОС. Вы неподъемную задачу себе поставили. Точнее она решабельна, если вы ограничитесь 98-м и Линуксом. Но при чем тут прерывания в момент ХОЛОДНОГО старта - там нету даже ДОС только БИОС и мы возвращаемся к "нулевому загрузчику". Вы сначала разберитесь с "кашей" в вашей голове, а потом успокойтесь и начните нормально объяснять. Похоже вы попались на то, что было в 95-м и 98-м - там была "быстрая перезагрузка". Я вас обрадую - в Линуксе теперь тоже есть быстрая загрузка "другого ядра". Но с вашим нулевым уровнем трудно понять, что это "две большие разницы". Читайте классиков и не пытайтесь изобрести "велосипед с ядерным реактором" - это невозможно. |
|
Создано: 02 февраля 2010 07:07 · Личное сообщение · #8 |
|
Создано: 02 февраля 2010 09:15 · Личное сообщение · #9 |
|
Создано: 02 февраля 2010 13:40 · Личное сообщение · #10 Когда то делал что-то подобное. Надо было стартовать NT из 98. Действительно проблема прерываний имела место быть. Решал просто - вместо дефолтового MBR писал свой. Мой MBR делал 2 вещи - 1)сохранял таблицу векторов во 2-й и 3-й сектор от начала харда 2) Читал оригинальный MBR из 4-го сектора и джампил на него. Эти сектора почти всегда пустые, можно юзать. Когда требовалась загрузка другой оси - восстанавливал оригинальную таблицу векторов с харда, читал требуемый BootRecord и вуаля. Вкратце так. Этот вариант катит только если есть возм-ть манипуляции с хардом. В общем случае как восстановить биосовские вектора - непонятно. Чисто теоретически - можно трейсить досовские хэндлеры пока они не прыгнут в биос. |
|
Создано: 02 февраля 2010 13:51 · Личное сообщение · #11 |
|
Создано: 02 февраля 2010 14:35 · Личное сообщение · #12 |
|
Создано: 02 февраля 2010 14:59 · Личное сообщение · #13 Rockphorr пишет: имхо главное будет отключить выгружаемую ось от системных таймеров ну и все занимаемые ею вектора сослать на заглушку iret Ерунда полная, таймеры здесь каким местом? Вектора тоже идут лесом, в PM юзаются совсем другие таблички. Надо сделать пару вещей - в CMOS пишем флаг рестарта, ребутим машину на горячую и выполняем код с 40:67 |
|
Создано: 02 февраля 2010 15:33 · Личное сообщение · #14 |
|
Создано: 02 февраля 2010 16:25 · Личное сообщение · #15 |
|
Создано: 02 февраля 2010 17:41 · Личное сообщение · #16 spinz давайте для начала ограничимся реальным режимом: есть дос(как часть винды) максимально чистый (без наворотов частичной многозадачности и обращения за границу первого метра) из нее вызывается прога в результате грузиться ось с другого раздела таймеры тут тем местом что в дос есть тоже критические секции - прообраз тех что в винде виртуалки и загрузчики как альтернативные решения мне известны, но не интересны ЗЫ: давайте не будем провоцировать закрытие топика обсуждением виртуалок загрузчиков и выяснением что лучше |
eXeL@B —› Программирование —› махинации со старыми осями |