Назад Вперед Оглавление

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:
           
           Icon "xdos"   dosemu.xpm
      
      Здесь предполагается, что была определена PixmapPath. В противном случае задайте полный путь к файлу.
    • учтите, что если вы зададите другое имя пиктограммы (не "xdos") в dosemu.conf, то потребуется изменить и fvwmrc.
    • перезапустите оконный менеджер. Обычно такой пункт есть в основном меню.
    Теперь вы должны увидеть эту пиктограмму, когда свернете xdos.

    Обратите внимание, что 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" трех-четырехлетней давности.



Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости