Ассемблер RISC-V под голое железо. Часть 2. Работа с VGA

Поділитися
Вставка
  • Опубліковано 2 лис 2024

КОМЕНТАРІ • 33

  • @Al.Sy.
    @Al.Sy. 7 місяців тому +5

    Очень интересно и познавательно. Главное - продолжать!

  • @Shifoner_
    @Shifoner_ 7 місяців тому +4

    Спасибо за Ваш Труд! Вы многое объясняете верно, нынче мало спикеров в подобном ключе! Спасибо Вам!

  • @Alexander_Gurov_RF
    @Alexander_Gurov_RF 7 місяців тому +3

    Использование макросов pop и push на classic risc based архитектурах (mips, risc-v, lm32, ppc, etc...) есть плохая практика. Не надо так делать. Потому что код получается более громоздким, и много лишних команд. На каждую операцию будет уходить2 команды. Однако, если надо сохранить/восстановить только один регистр -- то норм. Правильно сохранять регистры в стёк надо, сперва вычесть нужное значение из sp, а потом записать относительно регистра sp.
    Например, сохранять s1,s2,s3 надо так:
    addi sp, zero, -12
    sw s1, 0(sp)
    sw s2, 4(sp)
    sw s3, 8(sp)
    А восстанавливать так:
    lw s1, 0(sp)
    lw s2, 4(sp)
    lw s3, 8(sp)
    addi sp, zero, 12

  • @abelyarlindsey8386
    @abelyarlindsey8386 6 місяців тому

    Спасибо за видео. Хочу добавить, что на большинстве архитектур эффективнее работает последовательная запись (или чтение) в память "вперед", а не назад, в основном из-за алгоритмов кэширования. Поэтому в идеале, наверное, все-таки надо сдвигать точки символа влево, а не вправо, и проверять старший бит маски, а не младший, чтобы писать пиксели не задом наперед, а с увеличением адресов.

  • @theALFEST
    @theALFEST 7 місяців тому +3

    21:10 - изначально у vga цап был 6 бит на канал, 8 бит появилось позже, как расширение.

    • @CityAceE
      @CityAceE  7 місяців тому +1

      Вот оно что! Я ещё подумал, что это именно как-то с разрядностью связано. Это было моё первое знакомство с VGA. Теперь ещё одним пробелом в этом вопросе стало меньше. Большое спасибо за эту информацию!

    • @alexloktionoff6833
      @alexloktionoff6833 6 місяців тому +1

      8 бит это уже SVGA

  • @pavelmanzharov5872
    @pavelmanzharov5872 7 місяців тому +2

    Интересно. Хорошо бы подобное организовать на настоящем железе. Хоть и писал в комментарии к видео о плате что она своих денег не стоит, но кого я обманываю. Все равно куплю ту платку и буду мучить. Поскольку интересно разбираться в чем то новом для себя.

  • @alexloktionoff6833
    @alexloktionoff6833 6 місяців тому +1

    Для аргументов функций есть специальные алиасы регистров а0-а7, почему бы их не использовать, чтоб самых маленьких не путать а приучать к правильному стилю?

  • @Alexander_Gurov_RF
    @Alexander_Gurov_RF 7 місяців тому +1

    Не стоит удивляться странностям, типа двойного чтения при работе с оборудованием. Дело в том, что устройства -- это не память. И операции чтения/записи -- это самостоятельные события, которые могут по особому обрабатываться. Так же это может быть связано с memory barier, если он присутствует и реализован аппаратно. При симуляции, обычно, этого всего нет, и работа с периферией упрощена. А при работе с реальным железом нужно изучать документацию. Там может быть много всяких тонкостей.

  • @Alan-12345
    @Alan-12345 7 місяців тому +1

    Спасибо, здорово! Если можно, хорошо бы как можно меньше двигать листинг, очень сбивает.

    • @CityAceE
      @CityAceE  7 місяців тому +1

      Принял к сведению. Постараюсь пореже перемещать листинг.

    • @Alan-12345
      @Alan-12345 7 місяців тому

      @@CityAceEСпасибо!

  • @Alexander_Gurov_RF
    @Alexander_Gurov_RF 7 місяців тому +1

    Вообще, на большинстве архитектур стёк вниз растёт. И sp нужно ставить на верхнюю границу стёка. Иначе другие обработчики прерываний, либо библиотеки потрут данные. Какой смысл всё делать максимально не стандартно?

  • @Alexander_Gurov_RF
    @Alexander_Gurov_RF 7 місяців тому +2

    И ещё один момент. Сами макросы реализованы неправильно. Так делать нельзя. При сохранении регистра в стёк нужно сначала уменьшить sp, а уже потом туда что то записывать. При восстановлении наоборот. Дело в том, что если произойдёт прерывание -- то данные могут быть испорчены.

    • @CityAceE
      @CityAceE  7 місяців тому

      Согласен. А макросы я взял готовые из проекта про Doom.

  • @ДенисСемёнов-н4ф
    @ДенисСемёнов-н4ф 2 місяці тому +1

    отлично. А в железе будет что то реализовано?

    • @CityAceE
      @CityAceE  2 місяці тому

      Я, увы, не железячник...

    • @44Nemo44
      @44Nemo44 2 місяці тому

      Тоже думал, что в железе попробовать будет крайне интересно и полезно.

  • @Shifoner_
    @Shifoner_ 7 місяців тому +1

    zero где инициализируется или его возможно как то описать, это особенность транслятора?

    • @CityAceE
      @CityAceE  7 місяців тому +2

      zero - это псевдоним регистра x0 процессора RISC-V, в котором всегда 0.

  • @GlazkinSergey
    @GlazkinSergey 7 місяців тому +1

    У вас есть Личи с hdmi, почему бы с ним не эксперементировать, вместо qemu? Ведь от того, что код под ВМ подстроен и сама ВМ под код подстроена пользы нет. Фантазировать так, можно далеко от реальности уйти. Программа на Личи не будет работать та. Тут бы понять как с uart работать, что за инициализация, что за регистры uart...
    Ничего ге понятно, но интересно 😊

    • @CityAceE
      @CityAceE  7 місяців тому +2

      Личи есть, да. А графику на нём завести пока не удалось 🤷‍♂️ Вот и делюсь тем опытом, которым располагаю.

  • @alexloktionoff6833
    @alexloktionoff6833 6 місяців тому

    В самых вложенных подпрограммах, которые не вызывают подпрограмм, сохранять регистр связи в стеке не надо! Теряется весь смысл лине регистра, и заметно замедляется цикл например рисования линии на экране, время исполнения сохранения/восстановления из стека составляют заметную часть от времени исполнения команд изменения пикселя, да еще помноженное на тысячи раз, для каждого пикселя.

  • @АнастасияМаничева-з8х

    Можно старый формат, пожалуйста.

    • @CityAceE
      @CityAceE  4 місяці тому

      Не очень понял про какой формат вы пишите. Формат ролика? Формат подачи информации? Но я всё-таки полагаю, что вы про формат ассемблерного исходника по сравнению с таковым для ARM. Но дело в том, что там и здесь используются разные ассемблеры (компиляторы). И если ARM ещё можно привести к похожему формату RISC-V, так как и там, и там есть GNU C, то обратно никак. Для RISC-V, увы, не написали FASM'а.

    • @АнастасияМаничева-з8х
      @АнастасияМаничева-з8х 4 місяці тому

      @@CityAceE Формат подачи информации

    • @CityAceE
      @CityAceE  4 місяці тому

      @@АнастасияМаничева-з8х А что, с вашей, точки зрения изменилось? Возможно, вам не понравилось, что я в одном ролике пытался вместить больше информации без увеличения его хронометража?

    • @АнастасияМаничева-з8х
      @АнастасияМаничева-з8х 4 місяці тому

      @@CityAceE Именно, то, что в одном ролике больше информации, без увеличения его хронометража

  • @ВасилийШумилов-о8ь
    @ВасилийШумилов-о8ь 7 місяців тому

    Я про vga непонял, вроде это стандарт для персональных компьтеров, для гаджетов какието другие графические стандарты

    • @CityAceE
      @CityAceE  7 місяців тому

      VGA - это видео графический массив (Video Graphical Array), некий стандарт. И этот стандарт теоретически может быть применён к любому устройству. Вот так и здесь, есть некая виртуальная машина к которой "подключили" VGA-адаптер, с которым мы и работаем.

    • @Alexander_Gurov_RF
      @Alexander_Gurov_RF 7 місяців тому

      @@CityAceE далеко не факт что сей девайс совместим по регистрам с классическим VGA на PC. Но назвали так для наглядности. Конечно же, правильнее было бы назвать video controller.

    • @theALFEST
      @theALFEST 7 місяців тому +1

      @@Alexander_Gurov_RF достаточно совместим, раз тоже умеет modeX