console programming

Тема в разделе "WASM.UNIX", создана пользователем kas1e, 17 апр 2005.

  1. kas1e

    kas1e New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    48
    Адрес:
    moskow
    Приветвствую.



    Вопрос такой овольно объемный. Разделить можно на 2 части:



    1. Программирование текстмоде графики подобно 0x0b800 под досом. Т.е. также хотелось бы, чтобы было 1 байт сам символ, второй байт его атрибут (цвет и прочее). Реально такого же плана сделать ? Либо, если так нельзя, то каким либо другим более-менее универсальным способом работать с текстом в цвете. Простенький пример по выводу пары цветных ascii символов былобы очень кстати.





    2. Звук. Каким образом сделать универсальный плэер mp3 (или может уже есть кем нибудь написанный mod/xm плэер), чтобы без проблем работал как и в консоли так и под иксами. Тут я примерный путь вижу - можно взять mpg123 вырезать оттуда декрипт mp3 в raw data и ее уже направлять прямиком на /dev/dsp или /dev/audio (на linuxassembly по этому есть дока). В общем может кто уже в курсе и может подсказать ?



    Да, имеется ввиду конечно все на асме делать. Какой синтаксис и прочее не важно мне более главное суть.



    Спасибо за ответы.

    ps. На край пойдут и любые линки на какинибудь демогрупы которые специализируются на консольных демах по линукс.
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    kas1e

    2. fmod и minifmod есть для GCC, но не на асме.
     
  3. kas1e

    kas1e New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    48
    Адрес:
    moskow
    2quantum

    Со звуком разобрался, minifmod вполне хорош. Играет через /dev/dsp, урезается до минимума даже на сях, и вполне можно в асм это все перегнать. В общем со звуком все ясно. Теперь остался вопрос по textmode color графике.



    Очистку экрана делаю пока через write_stdout esc последовательностями типа .ascii "\033[2J\n\0". В принципе можно наверно и цветность символов также нарулить, но хотелось бы чтонибудь более нормальное. Может есть либа кемнибудь написанная, которая позволяет int 10 и b8000 юзать? Типа эмулятора небольшого килобайт в несколько :)



    И хочется сделать, чтобы и в консоли и под иксами было универсально, т.е. ставился какойто режим (допустим 80 на 25 в консоли), а в иксах при запуске окно терминала само раздвигалась на нужный размер :)



    В целом, если есть какието примеры, то и на сях пойдет все, потом в асм перегнать не проблема.
     
  4. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
  5. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    kas1e





    Дык есть уже, почти на асме

    http://www.wasm.ru/src/4/ufmod.zip
     
  6. kas1e

    kas1e New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    48
    Адрес:
    moskow
    2all, я же в wasm.unix написал :) т.е. мне конкретно под linux как я сказал выше нужно.



    2asmguru62

    за линк спасибо, но это винда. а иксы - xwindow. а винда и линукс само собой не универсальны никак.Да и эти монстрообразные апи килограмные нахер не хочется совсем.. Просто надо чтото типа b800h и int10 ..



    2asterix

    ufmod.zip - это винда и имхо проще с сей самому в асм переделать, чем с виндого асма в линукс тащить..



    ps. Вот нашел интересный линк:

    ftp://ftp.scene.org/pub/parties/2003/0a000h/textmode/fake-loaderbar.tg z работает как и в консоли, 80x25, так и в иксах открывает окно и тоже самое делает в нем. Как так реализовано ? Сижу сейчас дизасмлю, но пока не понял.. Может есть какаято либа/финт на проверку иксы это или консоль ?
     
  7. rgo

    rgo New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    87
    kas1e

    "Может есть какаято либа/финт на проверку иксы это или консоль?"



    переменная окружения DISPLAY.



    текстовый режим в линухе. Варианта три:

    - esc-последовательности + termcap

    - ncurses - тоже самое но через библиотечный интерфейс, т.е. гораздо удобнее

    - /dev/vcs* /dev/vcsa*, но это не портабельно, и с правами проблемы (тока из под рута работает).
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105


    Недавно тут похожий вопрос был, но про Винду.

    Так вот NT эмулирует адрес B800h для ДОС-приложений, правда там какие-то тонкости есть.

    Наверняка и Х-ы делают тоже самое для консольных приложений. Ncurses вроде должно работать, но

    у меня отложилось в памяти, что под Х-ы это

    не годится - только под чистую консоль.

    Но это очень давно было - могу ошибаться.

    Смотри тексты Midnight Commander-а

    Он использует разные библиотеки и есть (были)

    варианты под чистую консоль и под Х-ы.
     
  9. Nothing

    Nothing New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2003
    Сообщения:
    139
    Адрес:
    Russia
    В свое время интересовался прямым доступом к консоли в linux. Увы, там все очень запущено. В ядро намертво встроена эмуляция терминала vt102, (drivers/char/console.c), причем изменить ее нельзя никак. Никакого промежуточного api (между непортабельным низким уровнем и портабельной эмуляцией терминала) нет. Придется забыть что такое смена шрифтов (в 2.4 вообще был один консольный шрифт на все терминалы), страницы текстовой памяти, и многое другое доступное со времен dos. Эмулятор int 10h кстати есть и зовется он LRMI (Linux Realmode Interface)... Еще, как вариант, можно написать свой драйвер консоли, это уж совсем непортабельно и не так уж и сложно, зато можно вытворять все что угодно. Советую посмотреть на исходники драйвера консоли (лучше чем там нигде esc-последовательности не описаны) и SVGATextMode - если нужны нестандартные режимы типа 100х37...

    Что касается иксов. Тамошний xterm еще более ограниченный, даже ncurses имеет ограничения при работе под X, так что думаю можно забыть про "прямой доступ" к консоли под X-ами...
     
  10. rgo

    rgo New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    87
    Nothing

    "Увы, там все очень запущено"



    Ничего там не "запущено". Не надо гнать. esc-последовательноси в досе неудачны, потому как действительно медленнее. В *nix, это быстрее чем любой другой известный мне метод, за счёт уменьшения количества системных вызовов.

    ncurses работает на xterm не хуже чем на vt102. Он пользует базу данных консоли /etc/termcap, для выяснения конкретных esc-последовательностей, и правильность его работы на терминале типа xterm зависит только от правильности записи в termcap. С дефолтовыми настройками проблемы вылезают только при использовании readline, но readline и curses это независимые либы.



    А насчёт X. Ничего там не эмулируется. Это система не виндовс и такими глупостями не занимается. Всё гораздо проще. Запускается X сервер, создаёт display. Когда X сервер запускает дочерний процесс, то передаёт в переменной окружения DISPLAY строку идентифицирующую display. Дочерний процесс может её игнорировать, может использовать для подключения к display, а может попытаться найти другой display, это как ему больше нравится. Но портабельны только первые два варианта поведения.



    GNOME может жить в линуксе и без X, на фреймбуфере. Но, я считаю что это личные проблемы GNOME, и ориентироваться на это не стоит.
     
  11. kas1e

    kas1e New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    48
    Адрес:
    moskow
    Подизасмили с товарищем этот линк который я выше кинул, и реализовано в нем все так: Во первых сразу динамически прилеплена x11 сошка, потом в начале уже проги сомой запускаешь XOpenDisplay, если как говорится отсос - то пользуют /dev/vcsa и /dev/console, а если нет - то открывают xterm с нужными парамтерами и поехали там уже. Только это конечно варинат "иксы 100% стоят"..
     
  12. rgo

    rgo New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    87
    есть dlopen -- библиотеку подгружать можно и ручками. Только её самостоятельно искать придётся.