Как добавить LFB c помощью IO

Тема в разделе "WASM.OS.DEVEL", создана пользователем exeru, 11 апр 2010.

  1. exeru

    exeru New Member

    Публикаций:
    0
    Регистрация:
    4 апр 2010
    Сообщения:
    5
    Ситуация такая
    1.Написал свою систему...
    2.Хочу определить свой LFB в памяти в любом другом месте...
    Со стандартными LFB все понятно $B800(для текста) и $A000(для графики)
    Как установить другой линейный адрес для VGA?
    (VESA - это само собой)
    А как сделать это с помощью портов ввода/вывода

    К примеру процедура следующая:
    ===================================
    NewLFB: ;(Addr:int32-линейный адрес в памяти;
    SizeOfLFB:int32-размер этого самого буфера)
    ...
    В какой порт че выводить?
    mov al,?
    mov dx,?
    out dx,al
    ...
    ret
    ==================================
    plzz!!!
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    1) Не верю.
    2) Сделай отображение страниц на нужный адрес.
    Возьми документацию на VGA и посмотри там вроде есть (или нет) выбрать $B800 или $A000 или $B000
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Pavia
    Давно этим занимался. Есть мысли
    Он же вроде сделал уже себе режим линейной адресации. То есть скорее всего настроил регистр допустим FS на адресацию по всей доступной памяти (64 метра вроде... ограничение биоса)
    Далее ему нужно получить инфу о режиме через VESA биос.
    И адрес будет находиться в этой информации (для соответствующего видеорежима) (а именно двойное слово по смещению 28h - там адрес лин области видеопамяти).
    Вот его и ставишь как базу в дескрипторе FS.
    Вот только менять этот полученный адрес манипулируя контроллером ниразу нельзя (я не видел).

    Поэтому как мне кажется - это задача не решается таким методом. И вы правильно сказали - надо использовать страничную адресацию памяти.
     
  4. exeru

    exeru New Member

    Публикаций:
    0
    Регистрация:
    4 апр 2010
    Сообщения:
    5
    1) Windows не боги писали
    2) Лучшеб помогли разобраться
     
  5. exeru

    exeru New Member

    Публикаций:
    0
    Регистрация:
    4 апр 2010
    Сообщения:
    5
    Понимаете я сделал
    Разметку памяти...
    Переход в защищенный режим...
    Определил селекторы...
    //Текст то он выводит в $B800 Ну а графика сами понимаете 32 бита лучше чем 16

    У меня есть буфер (допустим Screen.Height*Screen.Width*4(RGBW) размером)
    В адаптере по любому должен быть регистр хранящий начальный адрес LFB
    Что тут невозможного Pavia?

    Спасибо - TermoSINteZ!
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    По любому от печки придется писать что-бы вам объяснить другого пути я не вижу.
    Дыру PCI ты не подвинешь она по любому от 4ГБ отсчитывается. Есть похожий регистр который прямо влияет на положение LFB, только его менять как угодно не получится.

    А во вторых вы неправильно понимаете что такое линейный адрес и что под ним понимают разные вещи в интеловской документации это вполне определенный конкретный механизм, когда само по себе понятие гораздо шире. Отсюда линейный непрерывный адрес(LFB) и линейный адрес (x86) есть понятия совершенно разные. Остается только отображение, что я и предложил.
    Я не говорил что не возможно. При помощи страниц отображаешь физический адрес на линейный куда надо и все дела.

    OUT dx себя отжил. С чего вы взяли что через него надо вести работу?