10. Работа в X-Windows
Прочтите все это для более полной информации об X ;-)
10.1 Последние данные
From Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>:
xdos начиная с dosemu версии pre-0.60.4.2 с патчем из моих последних писем получил ряд новых возможностей. В частности, он должен теперь понимать клавиши с дополнительной цифровой клавиатуры (клавиши с праого края MF-клавиатуры), а также NumLock и keyevents в диапазоне латинских символов, даже если вы запустили xdos на удаленном X-терминале.
Если что-то не работает так, как ожидалось, проверьте следующее:
- Не задавайте "keycode" в поддержке X. Опция keycode специфична для каждого X-сервера, в нашем случае XFree86, поэтому непереносима и я не советую ее использовать.
- Проверьте, например, с помощью "xev", что клавиши посылают осмысленные ksym-коды. Если вы считаете, что выдаваемый код должен обрабатываться xdos, сообщите мне подробности.
- Если вы используете xdos под XFree86, версий 3.1.1 и старше и клавиши
на дополнительной клавиатуре не работают, есть две возможности:
- Закомментируйте строку " ServerNumLock " в /usr/X11R6/lib/X11/XFConfig
-
Скормите следующий файл xmodmap-у. Насколько я понял из документации,
XFree-3.1.1 должен делать это сам, но у меня не стал. Это часть файла
/usr/X11R6/lib/X11/etc/xmodmap.std
! When using ServerNumLock in your XF86Config, the following codes/symbols ! are available in place of 79-81, 83-85, 87-91 keycode 136 = KP_7 keycode 137 = KP_8 keycode 138 = KP_9 keycode 139 = KP_4 keycode 140 = KP_5 keycode 141 = KP_6 keycode 142 = KP_1 keycode 143 = KP_2 keycode 144 = KP_3 keycode 145 = KP_0 keycode 146 = KP_Decimal keycode 147 = Home keycode 148 = Up keycode 149 = Prior keycode 150 = Left keycode 151 = Begin keycode 152 = Right keycode 153 = End keycode 154 = Down keycode 155 = Next keycode 156 = Insert keycode 157 = Delete
10.2 Более старая информация
From Rainer Zimmermann <zimmerm@mathematik.uni-marburg.de>
Некоторая базовая информация о поддержке X в dosemu. Она может даже оказаться полезной.
О чем нужно позаботиться:
- Сделать 'xmodmap -e "keycode 22 = 0xff08"' чтобы использовать клавишу backspace.
- Сделать 'xmodmap -e "keycode 107 = 0xffff"' чтобы использовать клавишу delete.
- Убедитесь, что dosemu скомпилировано с поддержкой X. (X_SUPPORT = 1 в Makefile)
- Следует установить vga font. См. README.ncurses.
- Запускать dosemu командой 'dos -X' в окне X-терминала. Или сделать линк 'xdos' на программу 'dos' - при вызове с этим именем dosemu автоматически подразумевает -X. Также есть новый отладочный флажок 'X' для сообщений, связанных с X. Для выхода из xdos, используйте 'exitemu' или выберите 'Close', оно же 'Delete' (лучше не 'Destroy') в меню 'Window'.
- есть некоторые пераметры конфигурации X в dosemu.conf. Подробности смотрите в examples/config.dist .
- запуск xdos в фоне (например, из меню) по какой-то причине не работает.
- Работа клавиатуры в окне dosemu пока не идеальна. Она могла бы быть быстрее, некоторые комбинации клавиш (например, Ctrl-Fn) не работают, и т.д. Однако, все еще поддерживается ввод в терминальном окне (т.е. окне, из которого был запущен dosemu). Если у вас возникли проблемы, попробуйте переместить фокус ввода туда.
- Работа клавиатуры, конечно, зависит от раскладки вашей X-клавиатуры (xmodmap). Если какие-нибудь клавиши не работают (например, Pause, Backspace,...), это скорее всего из-за того, что вы не определили их в xmodmap, или определили не так, как ожидало dosemu.
- использование прилагаемой иконки (dosemu.xpm):
- понадобится пакет xpm (pixmaps). Если не уверены, поищите файл типа /lib/libXpm.so.*
- также понадобится оконный менеджер, поддерживающий pixmaps. Fvwm устроит, о других не знаю. Twm, вероятно, не подойдет.
- скопируйте dosemu.xpm туда, где храните свои pixmap (не bitmap!) файлы (вероятно, /usr/include/X11/pixmaps)
- скажите оконному менеджеру их использовать. Для fvwm, добавьте такую
строку в свой файл fvwmrc:
Здесь предполагается, что была определена PixmapPath. В противном случае задайте полный путь к файлу.Icon "xdos" dosemu.xpm
- учтите, что если вы зададите другое имя пиктограммы (не "xdos") в dosemu.conf, то потребуется изменить и fvwmrc.
- перезапустите оконный менеджер. Обычно такой пункт есть в основном меню.
Обратите внимание, что xdos сам по себе не включает пиктограмму, поэтому нужно сообщить об этом оконному менеджеру. Я выбрал этот вариант, чтобы xdos не требовал библиотеку Xpm.
- Если еще что-нибудь работает не так, не паникуйте! :-) Помните, что программа еще только развивается. Однако, если считаете, что нашли серьезную ошибку, сообщите мне.
10.3 Состояние поддержки X (Sept 5, 1994)
Done
- X_update_screen (video output)
- implement cursor
- fix cursor/scrolling bugs
- fix Scroll (video/terminal.c) (?)
- fix banner message (initialization) (works after video cleanup, dunno why :)
- check video memory dirty bit
- X event handling (close, expose, focus etc.)
- fixed cursor initialization
- cleaned up cursor handling
- added 'xdos' calling method
- disable 'mouse' serial ports in X mode
- write direct scroll routine (not used yet, though)
- care about int10 calls -ok?
- Handle close ("delete") window event - (copied from xloadimage)
- X keyboard support (pcemu code, heavily modified)
- Mouse support
- X configuration (display, updatefreq, updatelines,... what else?)
- int10 video mode switches (resize window)
- Window SizeHints (fixed size or max size?)
- create icon :-)
10.4 Представление графических режимов (November 13, 1995)
Erik Mouw <J.A.K.Mouw@et.tudelft.nl> & Arjan Filius <I.A.Filius@et.tudelft.nl>
Мы внесли крупные изменения в X.c, которые позволяют под X работать в графическом режиме. К сожалению, при этом пришлось отключить поддержку cut-and-paste, но мы считаем, что графика гораздо интереснее (когда все установится, мы вернем cut-and-paste назад). Графика работает через vgaemu, эмулятор VGA. Состояние работы:
vgaemu
- Видеопамять. Запрашивается 1 Mb, с помощью mmap() она отображается на область VGA-памяти dosemu (0xa00000-0xbfffff) для поддержки переключения банков памяти. Это крайне специфично для i386-Linux, не удивляйтесь, если это не будет работать на NetBSD или другой (Alpha/Sparc/MIPS/etc) разновидности Linux.
- DAC (ЦАП - цифро-аналоговый преобразователь). ЦАП эмулируется полностью , за исключением pelmask. Эту возможность не сложно добавить, но это будет работать ужасно медленно, поскольку изменение pelmask требует полной перерисовки экрана. К счастью, изменения pelmask требуются не часто, так что никто и не заметит ;-)
- Контроллер аттрибутов эмулируется частично. (Сейчас эмулируются только запись и чтение из портов)
- Работающие режимы - 0x13 (320x200x256) и некоторые другие 256-цветные.
VESA
- Работают чтение/установка режима VESA, запрос информации и переключение банков.
- Работают все 256-цветные (640x480, 800x600, 1024x768) VESA режимы, но из-за ошибки в коде переключения банков vgaemu они неправильно отображаются.
- VESA-совместимый видео-BIOS отображается на 0xc00000. Он очень маленький, но в будущем это неплохое место для хранения встроенных BIOS фонтов (8x8, 8x16).
X
- Добавлена поддержка собственной палитры для 256-цветных режимов.
- Поддержка vgaemu.
- ВНИМАНИЕ: мы работали на X-серверах с глубиной цвета 8 бит на пиксел (XF86_SVGA), поэтому не знаем, как наш код поведет себя в других режимах. Мы даже не знаем, работает ли он вообще.
Erik
10.5 Новый код VGAEmu/X (July 11, 1997)
Steffen Winterfeldt <Steffen.Winterfeldt@itp.uni-leipzig.de>
Я работал над кодом для X и эмуляцией VGA последние несколько месяцев. Вот текущие результаты:
- поддержка графики в X работает теперь на всех X-серверах с глубиной цвета >=8
- размер окна графики можно изменять
- поддержка режимов hi- и true-color (используя номера режимов Trident SVGA и переключение банков)
- базовая поддержка mode-X режимов графики (non-chain моды, как в DOOM)
- еще более базовая поддержка для 16-цветных режимов
- почти полная поддержка VESA 2.0
- гамма-коррекция для графических режимов
- размер видеопамяти устанавливается в dosemu.conf
- можно устанавливать начальный размер окна графики
В текущей версии 4-х и 8-битовые SVGA режимы поддерживаются на всех типах X дисплеев. Режимы Hi-color поддерживаются только на дисплеях с в точности совпадающей глубиной цвета (15 or 16); режимы true color поддерживаются только на true color дисплеях, но всегда и 24- и 32-битовые.
Кроме того, сейчас в hi- и truecolor нельзя изменять размер окна графики, гамма-коррекция также игнорируется.
Поскольку типичный графический режим 320x200x8 часто будет использоваться со значительным масштабированием, а современные графические карты весьма быстры, я добавил кое-что для поедания времени CPU: вы можете включить билинейную интерполяцию. Она здорово улучшает качество изображения (но довольно медленная, т.к. у меня не было времени написать оптимизированную версию - пока она на обычном C). Если билинейный фильтр будет слишком медленным, попробуйте линейный, который интерполирует только по горизонтали.
Учтите, что (би)линейная фильтрация доступна не на всех комбинациях VGA/X-дисплей. В этом случае используются обычные процедуры рисования.
Если VGA-режим не поддерживается на текущем X-дисплее, экран графики просто останется черным. Это не значит, что xdos рухнул.
Поддержка VESA является (или должна быть) практически VBE 2.0 - совместимой. Для справок я использовал несколько документов, включая неофициальные спецификации VBE 2.0 от SciTech Software. Я сравнивал их с некоторыми реализациями стандарта VBE 2.0, включая SciTech's Display Doctor (ранее известного как UniVBE). К сожалению, реализация и описание разошлись в нескольких местах. В таких случаях я считал, что правильно так, как в работающей программе.
Единственная неподдерживаемая функция VBE - запись/восстановление состояния VGA. Но эта возможность редко используется, и ее отсутствие не должно вызвать много проблем.
VBE позволяет использовать горизонтальный и вертикальный скроллинг даже в текстовых режимах. Эта возможность не реализовывалась.
Если вы подозреваете, что линейный фрейм-буффер (LFB) вызывает неполадки, его можно отключиь в dosemu.conf, также как и интерфейс защищенного режима. Учтите, однако, что LFB работает быстрее, чем переключение банков, даже в DOSemu.
Список VBE-режимов по умолчанию включает много режимов среднего разрешения, удобных для игр (типа Duke3D). Вы можете также создавать собственные режимы в dosemu.conf. Однако учтите, что один и тот же режим не может быть определен дважды, второе (и последующие) определения будут проигнорированы.
Режимы, которые определены, но не поддерживаются из-за нехватки видеопамяти или за-за того, что они не могут быть отображены на вашем X-дисплее, помечаются в VBE-листе как неподдерживаемые (но остаются в нем). Учтите, что поддержки для 4-битных режимов VESA сейчас нет.
Существующий интерфейс между VGAEmu и X будет пытаться обновить сразу все некорректные видеостраницы. Это может, в особенности в VBE/SVGA режимах высокого разрешения, заметно нарушить обработку сигналов DOSEmu. В настоящий момент это не исправляется, но вскоре будет переработано (потем запуска отдельного процесса для обновления).
Если вы считаете, что именно в этом причина ваших проблем, попробуйте поиграть значением veut.max_max_len в env/video/n_X.c, возле строки 2005. Эта переменная ограничивает количество видеопамяти, которое обновляется за одно прерывание таймера. Это может существенно уменьшить нагрузку от обновления экрана, но в той же степени ухудшит качество картинки.
Гамма-коррекция работает как в 4, так и в 8-битовом режимах. Поскольку парсер файла конфигурации не понимает чисел с плавающей точкой, значение гамма в dosemu.conf должно указываться в процентах: gamma 100 = gamma 1.0. Большие числа дают большую яркость, меньшие - делают графику темнее. Разумные значения лежат в диапазоне 50 ... 200.
В файле dosemu.conf вы можете указать объем видеопамяти, который должен использовать VGA эмулятор. Это значение будет округлено вверх до ближайшего целого блока в 256К. Чтобы не запутать DOS-приложения, нужно использовать стандартные значения, например 1024, 2048, 4096. Учтите, что какое бы значение вы ни указали, 4-битовые режимы поддреживаются только до размера 800x600.
Вы можете влиять на начальный размер окна графики разными способами. Обычно это то же самое значение (в пикселах), что и в графическом режиме VGA, за исключением моды 0x13 (320x200, 256 цветов), которая растягивается в mode13fact раз (по умолчанию в 2). Либо, можно явно указать размер окна в dosemu.conf при помощи winsize. В любом случае потом вы сможете изменить размер окна.
Параметр конфигурации fixed_aspect позволяет зафиксировать отношение сторон графического окна при его масштабировании. Либо, aspect_43 устанавливает отношение сторон в 4:3. Идея заключается в том, что когда программа работает в DOS, она отображается на мониторе 4:3. Благодаря этому у вас не будет сложностей с режимами типа 640x200 (и даже 320x200), которые в противном случае выглядели бы искаженными.
Назад Вперед Оглавление
Перевод: Валерий Груздев (grue@vpti.vladimir.ru)
Примечание переводчика: данный файл подвергнут некоторым сокращениям, в основном опущены разделы "To Do" трех-четырехлетней давности.