Обо мне
Привет! Меня зовут Лис и это мой блог. Здесь я могу ныть и страдать, писать про код и обо всем.
Декабрь 2024
ПнВтСрЧтПтСбВс
1
2345678
9101112131415
16171819202122
23242526272829
3031
Теги
Блог страдающего Лиса
Lorem ipsum hello dolor sit world amet

10 окт 2024 Чт Оптимизация? Не... не слышал

Есть у меня один проект одного ядра 8088, который я решил просто доделать, чтобы было. Суть такова. Существует такая инструкция как REP MOVSW, например. Когда я делал это ядро раньше, то сделал ее такой, чтобы каждый раз она исполнялась за 12Т, и это очень, очень много! Несмотря на то что она исполнялась так медленно, даже этой скорости хватало, чтобы сделать скроллинг экрана со скоростью 65 кадров в секунду. Но разве это дело? Это медленно, и мне этой скорости не хватило.
move:   xor     di, di
        mov     si, 2
        mov     dx, 200
@@:     mov     cx, (318/2)
        rep     movsw
        add     di, 2
        add     si, 2
        dec     dx
        jne     @b
        ret
Выше я привел сакральные коды скроллера, который выполняет перенос всего экрана. Итак, как мы видим, краеугольный камень проблемы в том, что rep movsw выполнялась за 12Т на каждое пройденное машинное слово (2 байта). Я посмотрел в код и удивился, до чего я его не оптимально сделал.
Пришла пора значит, переделывать. Сегодня сел с утра и переделал так, что теперь вся эта инструкция выполняется за 4*CX + 3 тактов! Да, это вот такое ускорение аж в 3 раза! Один байт, получается, перекидывает за 2Т.
Если пересчитать количество тактов, то можно понять, что для того, чтобы сдвинуть экран 320 на 200, потребуется (160 x 4 + 3)*200 тактов, что равно 128600, и это в пересчете 25 000 000 / 128600 дает 194 кадров в секунду! Просто поразительное ускорение фактически на 300% только за счет того что я сделал оптимизацию.
Единственный минус в том, что если посередине исполнения этой инструкции возникнет сигнал INTR, то ему придется подождать, пока инструкция закончит работу. Учитывая, что там может быть 65535 итерации, то ждать придется 262140 тактов. Это надо учитывать при разработке программ, которые юзают INTR. Но и еще мне тоже надо доработать контроллер прерываний, чтобы не было такой ситуации, чтобы они были упущены, а то это нехорошо. Контроллер прерываний надо сделать внешний для этого. dance

А еще сделал чтобы STOSx выполнялся 1Т = 1 байт, с такой скоростью теперь пишется. Для LODSx вообще будет выполняться за 4-5Т всегда, вне зависимости от REP, поскольку имеет смысл читать только последние 1-2 байта из общей выборки.
Таким образом, я переделаю все строковые инструкции.

08 окт 2024 Вт Мне надоело переписывать с нуля

§ Предпринимаемость
У меня есть код, который называется процессор 8088, и я его уже миллион раз сделал, так что у меня есть одна простая идея, которая заключается в том, чтобы взять свой код и просто сделать его на Марсоходе-2, и всё. Надо будет доработать код, а не переделать.
Тогда вот что я предприму. Я просто обновлю код 16-битного процессора и сделаю для него простую демосценку, чтобы было. Пока что так. А какую демосценку я сделаю? Конечно же, вращение кубов, куда без них. Я сделаю запись трехмерного куда так, чтобы его мне хватило надолго.
Итак, можно проработать несколько вариантов. Известно что на Марсоходе-2 всего 46 Кб памяти. Если сделать 320 на 200, то можно будет располагать 32КБ памяти для 16 цветов или 16Кб для 4х цветов. Так как я хочу сделать цветное изображение, то 4 цвета тоже сойдет для двойной буферизации. Так что, останется 14 Кб для программной памяти. Интересно. Надо делать.
§ Куб: гиперпуп
Буду делать вращение куба на своем процессоре. Итак, у меня есть 16x2=32K памяти для хранения 4 цветов. Куб будет вращаться вокруг по 3м осям, как это делал старый добрый DirectX куб и рендерится с помощью обычных треугольников без использования буфера глубины. Это хочу сделать для демонстрации возможности ассемблерной программы, конечно же.
Видео область та же, A0000h-AFFFFh, то есть, писаться будет как обычно для видеоразрешения 320 на 200, но количество цветов не 256, а всего лишь 4. Мне просто хочется сделать 3Д хотя бы раз нормально.
Теги: Процессор

28 июн 2024 Пт Новый проект

Свой проект я буду делать постепенно и не спеша. Еще мне хочется много чего сделать, например, у меня есть новая ПЛИС, CE4 на 10К элементов, которую я так полностью еще не проверил до конца. Сегодня мне бы хотелось проверить ее работу, запустить VGA поначалу, попробовать подключить PLL, создать простой стартовый шаблон для начала работы.
Еще хочу сделать вывод экрана тоже, в 128 на 128 точек, из памяти. Могу сказать, что буферизация тут будет именно двойная, не иначе. Количество памяти, которое требуется на такое разрешение равно 128 x 128 (16384 пикселей), но так как в 1 байте 2 пикселя, из-за 16-ти цветов, то для одного видеобуфера необходимо всего лишь 8К. Однако, учитывая двухбуферную память, мне все равно потребуется 16К.
Всего в чипе CE4 встроенной памяти на 46К. Вычитая оттуда видеопамять, получаем свободное место 30Кб всего лишь. В этой памяти дополнительно будет храниться область спрайтов, на 256 знаков. Это займет 8x8x256 пикселей, что равно 16К пикселей. И да, 16 цветов, значит будет 8К.
Остается всего лишь 22К памяти для программ и данных. Это мало, на самом деле. Несмотря на это, все равно достаточно для написания простых игр.
Теги: Процессор

27 июн 2024 Чт Впечатление от PICO8

Признаться, меня крайне впечатлил проект PICO8, о котором я узнал совсем недавно и сильно заинтересовался им. Мне захотелось создать аналог такого проекта, но с использованием Верилога и ПЛИС. У меня нет задачи полностью повторить проект или сделать его абсолютно совместимым, я хочу сделать именно аналог. Для этой цели потребуется много чего.
  • Сначала, необходимо создать среду разработки, SDK
  • Для этого мне необходимо реализовать какой-нибудь процессор, чтобы эта среда могла запускаться
  • Поэтому я создам вначале процессор LIS собственной разработки
  • Параллельно созданию SDK, мне также потребуется VM (виртуальная машина), которая будет исполнять скомпилированный из LUA код. То есть, создам еще один процессор, но выполняющий более высокоуровневые операции.
  • Написать программное обеспечение
Задача крайне сложна, и я для того, чтобы собственно, создать процессор LIS, мне еще потребуется для него ассемблер. Да, ассемблер не так сложен, как LUA, но все-таки, желательно сделать так, чтобы он работал не только из обычного компьютера, но и сам смог на процессоре LIS ассемблировать в код процессора LIS, собственно.
Еще одна интересная деталь. Я хотел бы попробовать использовать SDRAM для того, чтобы запускать программы там, поскольку в первую очередь, байткод VFM8 (Virtual Fox Machine 8) будет исполняться непосредственно там.
Теперь остается вопрос, как я буду писать код? Скорее всего, я буду просто записывать его под видео, накладывать нейромузыку Яндекса и просто выкладывать в виде блога разработчика.
Теги: Процессор

27 апр 2024 Сб Снова процессор 8088

Я тут кое-что понял, и понял следующее. Хочу начать разработку снова процессора 8088, слегка усовершенствованного, на верилоге, для того, чтобы поставить его на плис CYCLONE, и запустить на нем программное обеспечение, которое напишу я сам.
  • БИОС
  • Операционная система, минимальная
  • Простые игры
  • Демонстрации
Ну в общем, создать собственную платформу на основе корпуса Электроники МС 1502 чтобы там было следующее:
  • ПЛИС CYCLONE с 25 Мгц генератором
  • Клавиатура PS/2 (может быть и мышь)
  • Карта SD
  • SDRAM
  • VGA на 640 x 400
  • Аудиовыход
  • Джойстик для SEGA
  • Поддержка картриджей расширения в качестве шины ISA
И может быть, что-то еще добавится в процессе. Например WIFI. Вот такая моя мысль, что хочется сделать.
Теги: Процессор

28 фев 2023 Вт Дорабатываю модуль KR580

Модуль этот я начал делать много лет назад и как обычно, тысячу раз делал и делал, и кое-как доделал. В чем замес модуля процессора? Он должен быть довольно простой и не содержать большого количества ненужных инструкции. Нет префиксированных команд. Сегодня я оптимизировал исполнение некоторых инструкции, например LD r,r сделал за 1 такт и также ADD HL,Reg16 тоже за 1 такт. Переработал обработчик прерываний. Там еще есть что оптимизировать и я этим буду постепенно заниматься.
Также пишу код для создания "муляжа" биоса, это для того, чтобы установить эту программу и наслаждаться чистым биосом. Что-то можно делать в нем, настраивать, даже инициализировать диски, которых нет, но самое интересное в том, что ничего этого сохраняться не будет. Просто биос, который ничего не значит. Это сложный код, несмотря ни на что.
Modularo.png
Такой вот экран мне пока что удалось нарисовать. Этого немного. Тут надо еще подцепить клавиатуру, пробросить порты, целая масса дел, а мне лень. И ради только того, чтобы этот экран появлялся.
Допустим, если я смогу сделать биос, стану ли я после этого делать какую-нибудь, пусть даже очень простую, операционную систему? Большой вопрос, и пока я не сделаю экран биоса, ни о какой ОС и думать даже не буду.
Теги: Процессор

25 фев 2023 Сб Делал упрощенный z80

Я как-то откопал один свой недоделанный проект по упрощенному z80 и стал его доделывать сегодня с утра, добавил верилятор, поправил код, передал довольно много вообще в самом ядре, чтобы все работало без always @*, потому что верилятор как-то плоховато понимает это дело. У меня вообще есть идея сделать загрузочный экран (симулятор экрана), для биоса. Сегодня решил посмотреть, какой там экран загружается и оказалось, что не все так как я думал раньше.
award.png
Если обратить внимание, то размер экрана будет 640 на 350 точек! Да, именно так, самое низкое разрешение VGA из возможных. Меня это немного не устраивает, ведь тогда шрифты тоже будут размером 8x14 точек, чтобы вместить 25 строк. Обычно я рассчитываю размер экрана на 640 x 400 точек, а тут высота 350. При переходе в настройки BIOS, правда, высота меняется на обычную, 16 точек на символ.
Интересная деталь в том, что якобы графика, где написано Epa Pollution Preventer и сверху Energy Star, все это нарисовано через знакоместа и в текстовом режиме, просто здесь изменен знакогенератор, чтобы рисовались символы из дополнительного набора (128-255), не ASCII. Раньше я голову ломал, как же так, вроде текстовый режим, а наложили графику. Оказывается, никогда из текстового режима эта графика и не уходила. Просто текстовые символы имеют такое начертание.
Теги: Процессор

13 фев 2023 Пн Упорно думаю что можно сделать на Max10

Уже который день меня не отпускает мысль, что же можно сделать для этого чипа, Max10, ну решительно ничего в голову не лезет! Может думаю, процессор мелкий впихать туда, типа 6502 или z80, но вот тоже, даже если его и запихну, что это даст, неясно вообще. Максимум, на что способен этот чип, так это лишь на то, чтобы сделать из него некий калькулятор небольшой, и только. Больше не знаю что можно сделать.
Мне правда, хочется его приспособить. Можно отсылать ему команды, он будет принимать, обрабатывать и выводить обратно. Может, сделать мини-игру? Не трехмерную, конечно, а типа текстового квеста. Такой, мирок небольшой, который рандомно развивается, типа небольшого фентезийного мира.
К примеру, там будет несколько локаций, которые можно исследовать, или они будут генерироваться случайным образом с помощью псевдорандома. И опять, ну не хватит же памяти для этого! 12 Кб лишь на чипе, не хватит памяти для генератора, даже у Элиты на спектруме было 48 килобайт и то еле-еле туда вместилось.
С другой стороны, почему бы не попробовать, даже с ограниченным количеством локации. Что от таких игр нужно? Особо ничего, фармить только со временем, собирать различные грядки, как в майнкрафте, только в текстовом виде. И все это делать с помощью консоли, то есть, открывать консоль через любой терминал, например через Arduino IDE или screen в линуксе, и посылать команды, такие как WALK, VIEW, HOME и так далее, которые будут передаваться по UART, приниматься через прерывание, обрабатываться и выдавать результат назад.
Можно будет записать и прочитать образ памяти 12Кб (это будет 15Кб base64), или использовать UFM, только для этого надо научиться ей пользоваться.
Теги: Процессор

06 фев 2023 Пн Пишу небольшой биос

Как и обычно, в течении некоторого времени я пишу программы, потом закрываю эти проекты, потом снова открываю и так далее. Сегодня сделал и проверил, чтобы в вериляторе работал мой проект с 86-м процессором (16 битным), и еще чтобы запускался на DE0. Как ни удивительно, но места занимает этот процессор не так много, около 3700 ALM из 18к всего доступных, что лишь только приблизительно 21% от кристалла. Это вообще-то, хорошо.
Контроллер прерываний работает вроде неплохо, я решил, что сделаю по-хорошему клавиатуру, через IRQ#1, с записью принятых данных в кольцевой буфер в оперативной памяти, кстати, которой довольно немало, 288 Кб, это только про кеш, а я потом обязательно сделаю DRAM, чтобы можно было адресовать до 1Мб и даже выводить видео 320x200. Единственное что могу сказать, это мне пока что вряд ли нужно в данный момент.
Этот биос не должен быть очень большим, уметь разбирать данные с клавиатуры, выводить на экран и работать с SD-картой, как минимум. Прямо минимальная функциональность должна быть какая-то, чтобы начать более-менее писать небольшие программы. Как-то еще думал, сделать ли игру на ASCII, но чего-то, мне кажется, плоховато получится, наверняка, так что это вряд ли в данный момент.
Код у меня так разбросан по всем углам, не могу никак один проект в одном месте держать и вообще, создать один проект и чтобы он работал нормально, обязательно по разным проектам одно и тоже понаписано, прямо не знаю, такое у меня дурацкое свойство есть, так делать.
Теги: Процессор

05 фев 2023 Вс Просто переделал свой процессор

Не смог я выдержать и все же, переделал код процессора с утра с 32-х битного в 16-битный, для того, чтобы он влез в Марсоход2. Синтезировал процессор этот на циклоне и вышло около 6.8 тыс элементов. Ниже привел отчет по завершении компиляции. И это лишь только процессор. Пока что вмещается.

Помимо самого процессора, на кристалле должна быть также и вся остальная периферия, это например, контроллер прерываний, клавиатура, как минимум и еще бы хорошо туда поместить карточку SD, без нее сложно будет. Хотя, как я ранее и говорил, я не собирался делать программы большими (если я вообще их буду делать, вот в чем вопрос).
Снимок экрана от 2023-02-05 11-25-58.png
Вот так выглядит запущенная простая программочка:
        org     0
        mov     ax, $b800
        mov     es, ax
        mov     ax, cs
        mov     ds, ax
        mov     si, hello
        mov     di, 0
        mov     ah, $30
@@:     lodsb
        and     al, al
        je      $
        stosw
        jmp     @b
hello:  db      "Operational sistemcher. Award Modularo. Contest mecha!",0
Эта программа сделана только для теста, она пока что отображается лишь в вериляторе.
Теги: Процессор
<< Ранние записи | Поздние записи >>