Сейчас на форуме: zombi-vadim, zds (+4 невидимых) |
![]() |
eXeL@B —› Программирование —› Поддержка V86 в 64-битных ОС |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 26 ноября 2013 20:19 · Личное сообщение · #1 Тема исключительно умозрительная, нежели практическая. Насколько реально осуществить поддержку выполнения 16-битных программ (ЭТО НОРТОООН!!!!) реального режима в 64-битной ОС? На первый взгляд нереально совсем, в лонгмоде процессор не поддерживает режим V86. Только что мешает перед началом выполнения V86-кода переключиться в обычный защищенный режим? По-моему ничего. Естественно при этом необходимо загрузить "правильные" 32-битные GDT, IDT, LDT, TSS,MSRы для сисентера и таблицы страниц, иначе возврат из V86 в ринг0 закрашит систему. При возврате в ринг0 из V86 (а это: сисколл - хотя встретить его в коде для реалмода почти невероятно, инт, либо эксепшн), 32-битный хэндлер тут же возвращает управление основному 64-битному ядру (с загрузкой 64-битных GDT и пр.). Таким образом для реализации поддержки V86 в 64 битном ядре нужно "всего лишь" добавить 257 32-битных хэндлеров + код для переключения в 32 и обратно + несколько 32-битных табличек. Ну и конечно поддержка NTVDM, которую выпилили к х..ям из винды64 )) ![]() |
|
Создано: 26 ноября 2013 22:20 · Личное сообщение · #2 ИМХО для такой задачи лучше использовать эмулятор процессора, это проще и безопаснее чем засорять ядро мусором для поддержки говн мамонта. Собственно, в Insyde UEFI bios, а также в coreboot, поддержка старых optional rom'ов сделана через x86emu. ----- PGP key ![]() |
|
Создано: 26 ноября 2013 23:37 · Поправил: hash87szf · Личное сообщение · #3 |
|
Создано: 27 ноября 2013 04:02 · Поправил: dosprog · Личное сообщение · #4 Тема симпатичная. Вспоминается давняя проблема с чтением LFN под чистой MS-DOS7.x (вернее, не проблема, а просто отсутствие такой возможности). Тогда, примерно в 2000 г., нашёлся энтузиаст, который сделал утилиту DOSLFN. (А к тому времени уже начался массовый переход на NT&NTFS и "проблема решилась сама собой", как оно зачастую и бывает...). Что-ж, с каждым новым витком прогресса "идти против течения" становится всё тяжелее. Видимо, всё сведётся к эмуляции. (ффф... эмуляция виртуального 8086...). И кстати,spinz, уже не умозрительная, а практическая тема - поддержка Full-screen mode для текстового режима консоли в этих новых системах Win7+, вы не в курсе? Вообще, по моим впечатлениям, в Микрософт просто не хотят поддерживать функционал, который они нарекли ненужным. В данном случае, функционал, "вредящий великолепию GUI". Имхо, на сегодняшний день самое компромиссное решение - WinXP/32-bit, но кругом полно максималистов и просто людей, которым пофиК. У них всё самое лучшее, без NTVDM,FullScreemMode, и т.д. У одного знакомого пользователя в наличии 4Гб RAM, парится под Win7/64, спрашиваю, зачем ему это, софт ведь не запускается нужный - отвечает, мол, надо использовать всю что есть память. Да и просто это круче. 4 или 3.7 - что круче? - я смеюсь, да - круче 4.))) ntldr, говно мамонта - это гигантское количество программного обеспечения для MS-систем. Правильно, зачем оно надо.))) На свалку. --ADD-- К следующему посту: Всё правильно,SYSENTER,SYSEXIT - PentPro, в V86 программах их и не должно быть, как и LGDT. ![]() |
|
Создано: 27 ноября 2013 06:45 · Личное сообщение · #5 hash87szf пишет: http://v86-64.sourceforge.net Хм, каждый раз убеждаешься, что все придумано до нас )) Глянул мельком сурсы (авторов ATT-синтаксиса следовало бы насадить на живительный кол) - в принципе реализация того, о чем я писал выше. Правда есть маленький косяк, там не обрабатывается сисентер из V86, хотя команда в V86 вполне валидна и в данном случае скорей всего вызовет краш ![]() |
|
Создано: 27 ноября 2013 08:51 · Личное сообщение · #6 |
|
Создано: 27 ноября 2013 10:41 · Личное сообщение · #7 spinz пишет: авторов ATT-синтаксиса следовало бы насадить на живительный кол +1 ----- PGP key ![]() |
|
Создано: 27 ноября 2013 15:29 · Личное сообщение · #8 |
|
Создано: 27 ноября 2013 15:48 · Поправил: Dr0p · Личное сообщение · #9 |
|
Создано: 27 ноября 2013 15:54 · Личное сообщение · #10 |
|
Создано: 27 ноября 2013 17:34 · Личное сообщение · #11 |
|
Создано: 27 ноября 2013 17:41 · Личное сообщение · #12 |
|
Создано: 27 ноября 2013 17:45 · Личное сообщение · #13 |
|
Создано: 27 ноября 2013 17:49 · Личное сообщение · #14 Gideon Vi пишет: когда-то это было нужно, не? Когда-то в 60-х, когда все молились на переносимость и совместимость (да и сейчас молятся, как будто софт пишется для удобства тех, кто будет его портировать) - возможно. Вот за это и нужно сажать на кол (а лучше титановый лом с шипами) и авторов синтаксиса, и их без(д)умных последователей. Какого хера синтаксис, который, возможно, был удобен полвека назад на каких-то давно забытых платформах, сделали для никсов стандартом на все времена и платформы? ![]() |
|
Создано: 27 ноября 2013 17:51 · Личное сообщение · #15 он ппц только для тех что изначально другой учил, а вот те кто учили изначально AT&T считают ппц синтаксисом Intel с таким успехом можеш заявлять что какой нибудь ARM/PPC/MK68 уродский асм, и это только потому что ты их не знаешь в этом легко видится то что люди очень не охотно учат что то новое или как тяжело переучиваются, но вообщем то их никто и не заставляет, им просто хочется поворчать)) ![]() |
|
Создано: 27 ноября 2013 17:56 · Личное сообщение · #16 |
|
Создано: 27 ноября 2013 18:02 · Личное сообщение · #17 да да, ты еще С++ вспомни! )) где присваивание делается одной командой a=b кто придумал вообще асм? какой еще mov eax,ebx? зачем столько избыточности? другое дело назвали бы регистры с циферками, mov a32,b32 и сразу понятно сколько разрядные регистры и вообще что за команда mov? зачем столько лишних букв? ппц вообще какой то)))))) ну вообщем нет смысла перемывать все по косточкам, ты с трудом осваиваешь что то новое, потому что сразу проецируешь с свой мир, увы изначально это не верно, твой мир только локально у тебя вселенная большееее и одним тобой не ограничевается ![]() |
|
Создано: 27 ноября 2013 18:02 · Поправил: VodoleY · Личное сообщение · #18 |
|
Создано: 27 ноября 2013 19:31 · Поправил: Gideon Vi · Личное сообщение · #19 spinz, у тебя происходит типичная подмена понятий. Усаживай на кол тех, кто навязывает устаревшие технологии, а не разработчиков стандарта, который был крайне актуален в свое время. Dr0p пишет: Я бы например никада на этом говнище не взялся кодить. ну, вероятно ты родился после появления этих ваших интелов. ![]() |
|
Создано: 27 ноября 2013 20:18 · Личное сообщение · #20 Gideon Vi пишет: Усаживай на кол тех, кто навязывает устаревшие технологии, а не разработчиков стандарта Во как! А не ты ли подменяешь понятия, проводя грань между разработчиками стандарта и теми, кто навязывает? Разработчики стандарта никуда не ушли из индустрии на следующий день, а как минимум еще пару десятков лет активно работали в самых разных проектах и немало способствовали продвижению "устаревших технологий" ![]() |
|
Создано: 27 ноября 2013 20:26 · Поправил: dosprog · Личное сообщение · #21 Наибольшее неудобство вызывает последовательность аргументов, и я когда-то тоже сильно ругал (про себя) ATT-синтаксис. Но потом попытался найти аналогию, и стало понятно, "откуда ноги растут". Как выглядит OS-команда "COPY","CP"(и "MOVE"!)? - C>copy [источник] [приёмник]. Так почему в ассемблере должно быть как-то иначе для инструкции <MOV>? Тем не менее, в нотации Intel оно иначе. Делали, как удобнее и понятнее было на тот момент, когда пользовались командной строкой. Ну, а в Линуксовом асме воспроизведена эта нотация, чтобы поменьше изменять проверенный код транслятора. После недели возни с ATT-синтаксисом он уже не кажется таким уж неудобным, только потом приходится "переключаться" обратно. При этом возможна (и бывала) куча ошибок... ![]() |
|
Создано: 28 ноября 2013 01:59 · Поправил: Модератор · Личное сообщение · #22 reversecode > зачем столько избыточности? другое дело назвали бы регистры с циферками, Это не избыточность, а сделано для удобства. Если юзать чисто цифры, то код трудночитаем будет. На z80 была система команд, где регистры пронумерованы и раскодируются в виде смещения, тоесть b, c, d etc и я помнил все три таблицы опкодов наизусть, потому что по порядку шла нумерация. И юзалась не мув, а лоад - ld c,d. Совдеповский аналог использовал ..., не логичные мнемоники, хотя кодировка инструкций была одинаковой. > ты с трудом осваиваешь что то новое Что именно здесь нового и что осваивать ? Актуальные вещи актуальны, потому что логичны. А треугольная кривейшая система даже не стоит не то что бы это осваивать, но даже внимания. И ты не ответил на вопрос, а ушёл от ответа. Потому что сам понимаешь его. Ты кстате на старика похож. Какое то совсем тугое восприятие ![]() ![]() |
|
Создано: 28 ноября 2013 02:44 · Поправил: reversecode · Личное сообщение · #23 |
|
Создано: 28 ноября 2013 03:02 · Личное сообщение · #24 reversecode Вот скажи, мне интересно стало. Ты в коде имена переменным, функциям даёшь ? А зачем, можно же как в деконпиле - sub1, v10.. Это плохой стиль. Вот например можно локали юзать под разные значения, тоесть не дефейнить пять локалей, а юзать одну. Но я так никогда не делаю - не тру это, код становится нечитабельным. ![]() |
|
Создано: 28 ноября 2013 03:08 · Личное сообщение · #25 dosprog > Как выглядит OS-команда "COPY","CP"(и "MOVE"!)? - C>copy [источник] [приёмник]. Наоборот, Dst, Src. Но не суть важно. Инструкция мув не просто копирует данные. Есть множество валидаций, трансляций етц. > После недели возни с ATT-синтаксисом Судя по синтаксису, он пригоден только для кортких инлайн вставок из пары инструкций. Для этого походу и нужны префиксы. Что то на нём сложное не пилят на сколько понимаю. ![]() |
|
Создано: 28 ноября 2013 04:20 · Поправил: hash87szf · Личное сообщение · #26 прекратить ныть "This is the AT&T syntax, so named because it was created by AT&T as a portable assembly notation tomake Unix easier to port from one underlying CPU to another. It’s ugly in part because it was designed to be generic, and it can be recast for any reasonable CPU architecture that might appear." атт синтакс - велосипед с шлюпкой и винтом. ![]() |
|
Создано: 28 ноября 2013 10:51 · Поправил: Dr0p · Личное сообщение · #27 hash87szf Code:
Накой нужен этот шлак - % ? lea 0x08(%ebx), %ecx - и что это за инструкция, где тут адрес. Очевидно по регистрам и инту что это x86 архитектура. Но всё искаверкано, не потому что я привык к другой, а потому что например 0x08 вообще не имеет отношения к приёмнику: 8D LEA Gv, M; G - the reg field of the ModR/M byte selects a general register. M - the ModR/M byte may refer only to memory. Ну а адрес формируется из сегмента и смещения Seg:[offset]. Такова архитектура. А код выше вообще какой то мусор. И какая может быть есчо портабельность, если это ассемблер ![]() Ненадо оправданий. Этот синтаксис велосипед с квадратными колёсами. ![]() |
|
Создано: 28 ноября 2013 16:22 · Личное сообщение · #28 |
|
Создано: 28 ноября 2013 16:32 · Личное сообщение · #29 hash87szf > душевно больные не лечатся Не могу сказать что мне вас жаль. Транками оно иногда лечится. > но взгляните на инстракшн формат РИСКов Зачем, вон выше кусок кода. Там пробелы заменены на %. Ну а зачем искаверкали красноглазые синтаксис понятно, у них же бугурт на всех и всё. Надо сделать что бы небыло похоже ни на что, пусть и черезжопными способами. Видимо нужен специальный редактор для такого кода ![]() ![]() |
|
Создано: 29 ноября 2013 05:38 · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Программирование —› Поддержка V86 в 64-битных ОС |