Сейчас на форуме: tyns777, zds, JustLife (+4 невидимых)

 eXeL@B —› Программирование —› махинации со старыми осями
Посл.ответ Сообщение

Ранг: 62.8 (постоянный), 11thx
Активность: 0.060
Статус: Участник

Создано: 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 чтоб записать на дискету загрузчик который мне отмониторит состояние векторов прерываний на момент холодного старта ...
а уж потом сравнив с тем что есть в досе принять решение о дальнейших маневрах




Ранг: 114.1 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 30 января 2010 14:02 · Поправил: SemDJ
· Личное сообщение · #2

21 век, а ты не понятно чем занимаешься

Удачи, может кто-то захочет тебе помочь, хотя сомневаюсь, судя по твоим коментам На Васме эта тема умерла, все советуют готовые решения в виде загрузчиков, а душа к ним не лежит тема тут тоже умрет

-----
minimaL_patсh на руборде




Ранг: 62.8 (постоянный), 11thx
Активность: 0.060
Статус: Участник

Создано: 30 января 2010 14:14 · Поправил: Rockphorr
· Личное сообщение · #3

SemDJ пишет:
21 век, а ты не понятно чем занимаешься


не вопрос, если у тебя такой уровень знаний, напиши прогу которая не просто выгрузит XP а еще после передаст управление на твой код
иначе замечание ниочем



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 01 февраля 2010 22:49
· Личное сообщение · #4

Rockphorr пишет:
напиши прогу которая не просто выгрузит XP а еще после передаст управление на твой кодиначе замечание ниочем

Ваша цель именно это сделать или иметь гибкий загрузчик. Перезагрузка в ХП уже реализована, осталось только повторить. Что касается начального загрузчика - берете GRUB4DOS и я думаю, что там все найдете.
Имеются исходники, так что можете изучать как и что. По поводу загрузки Линукса из под ДОС - syslinux, прекрасно все делает и тоже с исходниками.




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 01 февраля 2010 23:23
· Личное сообщение · #5

также могу порекомендовать загрузчик Chameleon, он тоже с сорсами, есть NASM

актуальные на данный момент сорсы: Chameleon-2.0-RC4-r684-src.tar.gz

-----
EnJoy!




Ранг: 62.8 (постоянный), 11thx
Активность: 0.060
Статус: Участник

Создано: 01 февраля 2010 23:35
· Личное сообщение · #6

tundra37
цель сделать именно это - выгрузить одну ось и загрузить другую

добавить в загрузчик кусок кода с диалогом и продолжением загрузки с любого указанного раздела задача достаточно тривиальная



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 02 февраля 2010 06:52
· Личное сообщение · #7

Rockphorr пишет:
добавить в загрузчик кусок кода с диалогом и продолжением загрузки с любого указанного раздела задача достаточно тривиальная

Тогда зачем вы говорите про теплый и холодный рестарт - это понятия БИОС. Вы неподъемную задачу себе поставили. Точнее она решабельна, если вы ограничитесь 98-м и Линуксом. Но при чем тут прерывания в момент ХОЛОДНОГО старта - там нету даже ДОС только БИОС и мы возвращаемся к "нулевому загрузчику". Вы сначала разберитесь с "кашей" в вашей голове, а потом успокойтесь и начните нормально объяснять.
Похоже вы попались на то, что было в 95-м и 98-м - там была "быстрая перезагрузка". Я вас обрадую - в Линуксе теперь тоже есть быстрая загрузка "другого ядра". Но с вашим нулевым уровнем трудно понять, что это "две большие разницы". Читайте классиков и не пытайтесь изобрести "велосипед с ядерным реактором" - это невозможно.



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 02 февраля 2010 07:07
· Личное сообщение · #8

Теперь сообразил зачем вам прерывания БИОС. Вы собираетесь восстановить "среду начальной загрузки".
Ню-ню. Даже могучий Микрософт забил на это дело, а вы справитесь...



Ранг: 62.8 (постоянный), 11thx
Активность: 0.060
Статус: Участник

Создано: 02 февраля 2010 09:15
· Личное сообщение · #9

tundra37
в досе имхо шансы неплохие если не грузить emm himem
все станет ясно как сравню таблицы векторов



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 02 февраля 2010 13:40
· Личное сообщение · #10

Когда то делал что-то подобное. Надо было стартовать NT из 98. Действительно проблема прерываний имела место быть. Решал просто - вместо дефолтового MBR писал свой. Мой MBR делал 2 вещи - 1)сохранял
таблицу векторов во 2-й и 3-й сектор от начала харда 2) Читал оригинальный MBR из 4-го сектора и джампил на него. Эти сектора почти всегда пустые, можно юзать. Когда требовалась загрузка другой оси - восстанавливал оригинальную таблицу векторов с харда, читал требуемый BootRecord и вуаля. Вкратце так.
Этот вариант катит только если есть возм-ть манипуляции с хардом. В общем случае как восстановить биосовские вектора - непонятно. Чисто теоретически - можно трейсить досовские хэндлеры пока они не прыгнут в биос.



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 02 февраля 2010 13:51
· Личное сообщение · #11

Добавлю - вариант с трейсом может не прокатить, т.к. теоретически не все хэндлеры доса могут отдавать управление оригинальному хэндлеру биоса. Надо смотреть. Знатоки доса , ау, просветите



Ранг: 62.8 (постоянный), 11thx
Активность: 0.060
Статус: Участник

Создано: 02 февраля 2010 14:35
· Личное сообщение · #12

spinz
имхо главное будет отключить выгружаемую ось от системных таймеров ну и все занимаемые ею вектора сослать на заглушку iret



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 02 февраля 2010 14:59
· Личное сообщение · #13

Rockphorr пишет:
имхо главное будет отключить выгружаемую ось от системных таймеров ну и все занимаемые ею вектора сослать на заглушку iret

Ерунда полная, таймеры здесь каким местом? Вектора тоже идут лесом, в PM юзаются совсем другие таблички. Надо сделать пару вещей - в CMOS пишем флаг рестарта, ребутим машину на горячую и выполняем код с 40:67



Ранг: 78.3 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 02 февраля 2010 15:33
· Личное сообщение · #14

spinz пишет:
Надо было стартовать NT из 98


Rockphorr пишет:
У меня вознила такая идея поставить Win95 на С WinME на D


---
вы про виртуальный машины слышали ?



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 02 февраля 2010 16:25
· Личное сообщение · #15

про "виртуальный машин" слышали. Только в 98 году вмваре была еще не юзабельной, она была просто никакой



Ранг: 62.8 (постоянный), 11thx
Активность: 0.060
Статус: Участник

Создано: 02 февраля 2010 17:41
· Личное сообщение · #16

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

виртуалки и загрузчики как альтернативные решения мне известны, но не интересны

ЗЫ: давайте не будем провоцировать закрытие топика обсуждением виртуалок загрузчиков и выяснением что лучше


 eXeL@B —› Программирование —› махинации со старыми осями
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати