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

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

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

27 фев 2023 Пн Треугольное чтиво

Короче, решил я делать треугольники не такими, как ранее. Я думал, что буду хранить их в кеш-памяти, но так не пойдет, потому треугольники будут храниться в памяти SDRAM и рисоваться по следующему алгоритму:
  • Получаем треугольники из последовательности
  • Применяем матрицу преобразования камеры
  • Проверяем треугольник на видимость — если вообще невидим, не добавляется в очередь. Если видим — добавляется он один. Если треугольник разрезается на части — режем его и добавляем 2 треугольника.
  • Рендерим очередь треугольников, если заполнилась
  • Если еще есть что сканировать, возвращаемся к 1
Это приблизительный план того, что будет делаться. По мере разработки я буду уточнять. Сам треугольник в памяти будет занимать 32 байта: (x,y,z,u,v) — это ровно 8 байт, так как на x,y,z будет требоваться всего лишь 16 бит в формате half precision float point. Хотя, можно сделать и signed shoft, где занимаемый диапазон значений будет от -32768 до 32767, целочисленно. Я пока что не знаю, стоит ли так делать. Три точки по 8 байт это 24 байта, остальные 8 байт под параметры самого треугольника, например, номер текстуры или шейдерной программы.
Теги: Графика

26 фев 2023 Вс Придумал интересную историю

Это сценарий, а не рассказ. Запишу чтобы не забыть. Вдруг я смогу написать настоящий рассказ по этому? Вряд ли, но мало ли что.
Очень-очень далекое будущее, спустя миллионы лет, люди сумели колонизировать другие планеты, заселяя космос. С планеты, ну допустим, Геанцит (условно говоря) по командировке на Землю прилетает житель новой планеты. Эти люди уже не похожи на обычных и облик уже изменился из-за мутации.
Начинается все с космического корабля, который должен прибыть на Луну через 30 минут. В это время герой просыпается ото сна и ждет прилета, попутно зайдя в пищевой блок, пройдясь по коридорам, лифтам, знакомясь с разными историями, записанные в бортовые компьютеры и общаясь с другими пассажирами
Герой прилетает в Космопорт на Луне. Это величественное сооружение, захватывающее дух, высотой чуть ли не в целый километр. Он проходит осмотр, регистрацию и ожидает прилета корабля-челнока на Землю, осматривает, общается с людьми, роботами, андроидами, другими расами. Для этого ему выдаются специальные очки, где можно посмотреть перевод с любого языка.
Однако, случается непредвиденное. На Луне происходит колоссальное лунотрясение и Космопорт частично обрушивается. Никто не знает, почему это произошло.
Герою предстоит выбраться в безопасное место, спасти людей по пути. По мере того, как вокруг паника и неразбериха, просачиваются слухи о том, что это было не простое лунотрясение, появляется некоторая информация, что это взрыв термоядерного реактора в недрах Луны.
С Земли отправляются спасательные челноки и забирают пострадавших. Однако герою не удается сесть на них из-за вторичного удара и приходится уезжать в более безопасную зону на Луне. Над поверхностью виднеются взлетевшие вверх огромные осколки. Ведя луноход, он уклоняется от летящих осколков и укрывается в бункере.
Теги: Рассказ

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. Раньше я голову ломал, как же так, вроде текстовый режим, а наложили графику. Оказывается, никогда из текстового режима эта графика и не уходила. Просто текстовые символы имеют такое начертание.
Теги: Процессор

24 фев 2023 Пт Треугольник на верилоге

Наконец-то я смог сделать это! Да, треугольник на верилоге получился не так легко и быстро, но я и не рассчитывал на то, что это получится быстро, но мне удалось. Возможно, не полностью все смог сделать правильно и оптимально, но то что есть, тоже уже не так плохо.
Сегодня отнес в свою комнату мощную плис на 150к элементов, Циклон 4, и сумел настроить квартус, чтобы он с ней смог работать. Программатор работает не очень быстро и даже с первого раза не получилось запрограммировать, был какой-то странный сбой, но потом все удалось.
Однако, то, что я нарисовал, меня не устраивает, потому что это не трехмерная графика, а чисто двухмерный зарисованный треугольник. Существует и другой алгоритм, который можно реализовать, но делать его буду сначала на Си++, а уже потом на верилоге, если получится. Трехмерная графика не такая простая, даже простой рендерер сделать на верилоге непросто.
Какие планы на то, чтобы сделать трехмерную сцену? Что на ней будет? Сам не знаю, может, простой трехмерный куб допустим, только вот одна интересная штука есть, этого всего мало. Передвижение в трехмерном мире может, и отличная идея, но сам этот мир должен тоже как-то меняться и чего-то там надо делать. Все это слишком примитивно получается.
Я хотел бы попробовать поделать сначала "биос", или такой, эмулятор его, который задумывал ранее. Тоже, хочется его сделать. Посмотрим, что получится...

23 фев 2023 Чт Про то, как я хочу сделать треугольники

У меня давным-давно есть одна мысль, которая называется "трехмерный рендерер на верилоге", о котором я часто думаю и не знаю, насколько результативно. Мне хочется сделать пусть даже небольшой, но код для плис, где автоматически из буфера могли бы рисоваться трехмерные треугольники. Это крайне непростая задача, хоть и рисование обычного треугольника не так сложно, но полноценный вывод трехмерного изображения на экран потребует довольно крупных усилий.
Как все это работает? Существует несколько буферов в памяти:
  • Буфер вершин (vertex), где хранятся все исходные вершины для рендерера
  • Буфер индексов (indicied), там хранится номер вершины
  • Текстурный буфер для треугольников
Что будет делать видеоускоритель.
  • Просматривается буфер вершин, к каждой вершине применяется матрица камеры, то есть, умножается на эту матрицу (она задана float или half-precision значениями). На самом деле для матрицы камеры вполне достаточно даже и half-precision, я думаю.
  • Просматривается буфер индексов, проверяя то, где находится та или иная вершина. Если все вершины находятся впереди проецирующей плоскости, то такой треугольник добавляется в буфер очереди на рисование. Если все вершины вне пределов проецирующей плоскости, то треугольник вообще в очередь не добавляется. В случае частичного попадания за плоскость, треугольник разбивается на 2 части и добавляется в очередь как два треугольника. В очередь добавляются уже готовые вершины, не привязанные к vertex/indicies
  • Происходит вычисление параметров треугольников для текстурирования и записывается в отдельный буфер. Тут очень много умножений.
  • Для каждой точки вычисляется проекция. Здесь уместно использование конвейерного деления для ускорения.
  • Все полученные точки треугольников сортируются пирамидальной сортировкой по возрастанию спроецированного Y. Причем сортируется только самая высокая вершина (которая имеет наименьший Y). Также, сортируются именно индексы новых точек. Это нужно для того, чтобы не перемещать большие объемы данных внутри буфера рендеринга, а только лишь индексы. Каждая вершина имеет индекс принадлежности к определенному треугольнику
  • И последний этап, это рендер.
При рендере происходит проверка и вовлечение новых треугольников по мере их добавления. К примеру, если будет отсортированный индекс указывать на вершину A треугольника 4, то номер треугольника добавляется в очередь, причем он добавится в очередь только тогда, когда достигнет того же самого Y, что имеет вершина A. Добавляя эту вершину, потребуется узнать также и все остальные его параметры, такие как высота между вершиной A и C, чтобы знать, когда закончить рисование треугольника и удалить его из очереди.
По мере построчного рисования, будет рисоваться буфер из треугольников, интегрально прибавляя значения, формируя точку на текстуре и точку глубины, записывая эти данные в однострочный буфер глубины. Каждый раз после того, как будет нарисована одна линия, этот буфер очищается для новой линии.
Другими словами, на каждой линии будет отрисовываться несколько текущих рисуемых треугольников за раз. После того, как это будет сделано, из полученного буфера размером в одну строку будут скопированы и вычислены текстуры, итоговый цвет записан в видеобуфер и сам строчный буфер очищен для новой строки.
Вот такая вот сложная система.

22 фев 2023 Ср Писал рассказы

Сегодня я то и делал, что писал рассказы то утром, то вечером, но эти рассказы как обычно, складирую просто так. Почитал я те, которые ранее написал и могу сказать, что мне нравится, у меня творческий такой период пошел, в котором я пишу много всякого. После того как создал этот блог, прямо разошелся делать каждый день и сделал это даже традицией, не хочется пока что пропускать ни одного дня, ни написав что-нибудь.
Как и обычно, целый день мне хочется спать и более ни о чем не мыслю, как о том, чтобы поспать, но как только собираюсь в сны, то нахожу тысячу причин, чтобы посидеть за компом и чего-то поделать. Все это потому, что мне не хочется пропускать ни одной секунды драгоценного времени, но вместо этого сижу втыкаю в монитор и пропускаю еще больше времени, если я бы просто поспал. Бред...
Когда перечитывал рассказы, то захотелось дописать еще их и сочинил еще одну главу, и пока сочинял, пришла мысль как сделать еще одну, и вообще какой-то сюжет начал вырисовываться потихоньку, между прочим. Интересно так, я создаю свой собственный фентези-мир (так сказать), там правда нет никаких фей, мечей и магии пока что, но вдруг появятся еще. Насчет магии неизвестно, но мысли есть, но что-то не хочется ее примешивать никуда. Пусть это просто будет обычный мир с необычным антуражем, ведь вообще, для чего это все пишется? Для того, чтобы попытаться убежать от реальности как можно дальше и не думать абсолютно ни о чем плохом. Это значит, что мой мир, который я придумал, не будет агрессивным. Вообще никак! Не хочу я этого, хочу мира, тепла, уюта и маленьких радостей. Но сюжет там, все-таки, будет, пусть и не особо большой.
Вот такие вот дела, надеюсь, что получится дописать до конца хотя бы одну историю свою, а то вечно ничего завершить не могу. Потом оформлю в книгу и буду ее читать.
Теги: Дневник

21 фев 2023 Вт Я постоянно чего-то боюсь

И это касается не того общего страха за туманное будущее, который меня постоянно терзает, а вообще из-за всего, вот к примеру, не могу делать что-то на ПЛИС, потому что понимаю, что как обычно, когда начну делать, ничего доделать не смогу и постоянно мои проекты какие-то очень огромные получаются. Давно хочу сделать рисование треугольников на языке программирования электронных схем Verilog, а ничего не удается, потому что мне то лень, то еще как-то делать не хочется, то я боюсь чего-то бесконечно.
Чего бояться мне? Просто надо делать, да и все. Но думаю, вот какая причина, по которой делать мне сложно, это само по себе, архитектурное решение. Просто, эти треугольники работать будут крайне медленно, в то время, когда есть быстродействующие видеокарты. Второе — это память, которой тоже надо очень много, не то что мегабайты, а гигабайты. Памяти вообще мало не бывает никогда и чем ее больше, тем лучше.
Еще я как-то утратил интерес к теме программирования на верилоге. Раньше было какое-то стремление сделать процессоры, а когда сделал, уже особо то и не хочется этим заниматься больше, ибо все что я хотел, достиг. Расширять возможности достигнутого не сильно тянет, мне и того, что сделал, вполне достаточно для полного счастья.
А вот с видеокартой так давно хотелось все это доделать и я не думаю, что достиг предела того, что хотел, потому что периодически появляется желание перевести геометрию этого мира хотя бы частично в геометрию в трехмерном математическом пространстве. Еще мне всю жизнь хочется сделать виртуальный мир, в котором бы жили NPC, и с которым можно было бы взаимодействовать. Опять, кажется, а чего бы мне не делать, раз хочется? Это все из-за страха, что сделать не смогу, что когда начну делать, получится не то совершенно, что проект слишком велик для меня, и так далее и в таком вот духе.
Это страх сделать шаг и двигаться в направлении цели. Путь очень велик, меня пугает его длина, кажется, что будто бы не дойду до конца. Но ведь лучше двигаться хоть в каком-то направлении, пусть даже не достигнув конца пути. А кто говорит о том, что у него есть конец? Если он есть, то в любом случае недостижим. Путь всегда будет впереди и он никогда не закончится. Ну и что стоять теперь на месте?
Да пусть ничего не получится, это не должно меня страшить. Но все-таки, страшит и еще появляется такое ощущение бесцельности и бессмысленности, отчего сразу же опускаются руки. Что мне делать в этом случае, какую великую идею найти? Вот не хочется делать, не вижу цели! Но надо заставить себя, тогда. Это ощущение бесцельности тоже ложное. Надо вспомнить о том, почему я выбрал путь, по которому пошёл и продолжать по нему ну пусть не идти даже быстро, а еле-еле передвигаться, но всё же, хотя бы какое-то движение делать.
Теги: Дневник

20 фев 2023 Пн Образы перед внутренним взором

Сегодня я так сильно устал, что просто лег на кровать и стал засыпать. Перед внутренним моим взором поплыли различные гипнагогические образы, которые хотелось бы записать на будущее. Вообще, так сказать, я очень хочу спать постоянно и для меня сон в постоянном недостатке.
В этих образах я видел снежную дорогу, идущую постепенно вверх, и по этой дороге шли люди, вверх и вниз. Лично я с любопытством осматривал эту дорогу, стремясь запомнить ее хорошо. Впереди виднелся возвышающийся мост, куда я собственно и двигался. Между прочим, я даже знаю, откуда этот мост и что он для меня значит. Помню я даже делать его в майнкрафте пытался неоднократно. Этот эпизод в жизни мне нравится тем, что он такой необычный. Под мостом была специальная дорога, куда мы забирались с ребятами, но это еще ладно. Самый впечатляющий момент был в мистичности пролётов у этой дороги, которые заканчивались дверями в виде круглых зеркал. Я вообще тогда так и думал, что это зеркала, и даже после того, как убедился в том, что это не так, ощущение чего-то загадочного не покидало меня, да и не покидает и по сей день.
Это одна часть предсонного видения, потому что я чуть не заснул, пока лежал, а во второй части я увидел перед собой довольно отчетливо кучу фурри, которые собрались где-то в дворце культуры, что ли, или на площади, но это не были такие переодетые фурри, а настоящие прямо, и можно сказать, мои мечты сбылись, наконец, я увидел как они в реале могут выглядеть и это так сказать, весьма необычно. Антропоморфные кошки с яркими глазами и кошачьей мордой, но одетые в человеческую одежду и все с хвостами.
1619261606_10-pibig_info-p-furri-lisi-anime-krasivo-10.jpg
Пикрелейтед тут не в тему, а просто прикола ради.
Теги: Дневник

19 фев 2023 Вс День прошел довольно насыщенно

Сегодня я съездил в "Мир электроники" и купил там резисторы на 150 Ом, 3.3 кОм, а также конденсаторы 4.7 нФ и 100 мкФ (электролитические) и два полевых транзистора, только вот они SMD, что меня несколько расстроило, потому что не пойму как с ними буду работать. Также я купил переходник для Jack наушников, и зачем-то, 74LC256 (32 кБайт) микросхему EEPROM по I2C протоколу который работает. Для чего все это мне нужно? Я хочу сделать вывод из плис на наушники (стерео), чтобы мне генерировал звук.
Вчера вечером бился над тем, чтобы создать качественный розовый шум (не белый шум), и проверил разные варианты, сначала просто пытаясь вырезать якобы высокие частоты, потом через Фурье пытался, только это очень медленно и все равно ничего не получилось, а утром сел и быстро сделал все что нужно и качественно. Как мне это удалось? Можно сказать, почти что случайно, просто подумал, что можно генерировать уровень звука с помощью случайного прибавления шума, то есть, дифференциально. И все получилось успешно! В итоге, получается качественный розовый шум, как я и хотел.
Этого мне было мало и я наложил бинауральные ритмы 100 и 102 гц, чтобы получить частоту 2 гц, и наложил на шум. Тот результат, который получился, мне весьма понравился, и потому я сгенерировал часовую версию этого звука, используя язык программирования Си/Си++. Да, еще сделал новый класс для того, чтобы создавать WAV-файлы было легко и приятно. Надо в него еще добавить возможность загружать WAV-файлы, кстати говоря... но сейчас туда можно лишь только писать.
Прогулялся сегодня неплохо, дошел до торгового центра, купил там кое-чего, подышал воздухом, посмотрел на городские виды, которые живописно расстилаются с холма, где стоит торговый центр, там еще аквапарк есть, только я там никогда не был и не знаю, как выглядит внутри. Да в целом, и не важно.
День был очень насыщенным, даже всего тут и не рассказать, и устал как-то, обо всем рассказывать тоже особо нет большого резона. Хотя, с другой то стороны, а почему не рассказать о том, как прошел мой день? Например, я заехал сегодня ресторан "Сыроварня" и купил там сыр, потом пешочком пошел до Электроники, купил что надо и пошел до Планеты. Там зашел в Окей, набрал немного, что смог в руки взять, но все же, ориентировался на Солнце, ибо не хотел возвращаться домой затемно. Хотел было поехать домой сразу, но сел зачем-то на другой автобус и он поехал не туда, куда надо. Сошел с этого автобуса на остановке и хотел было пойти на другой... но нет, меня приманил лес, залитый вечерними солнечными лучами, так что зашел туда и зафотался как следует, ибо такое пропускать грех, это же лес! Ну а потом, конечно, поехал домой.
Я не знаю то, смогу ли сделать то устройство для аудио, которое хотел, но хотя бы, попытаюсь. Для начала, сделаю его на макетной плате, поставлю другой транзистор, вместо полевого, вдруг прокатит... если не прокатит, то тогда придется этот SMD ставить. У биполярного транзистора есть ток утечки с базы всегда в минус, вот в чем проблема, так что это может создавать ошибочные уровни громкости. А хотя я сейчас посмотрел, это же биполярный транзистор! Так что я смогу его заменить другим вариантом без проблем. Или нет... у него совсем другая направленность, pnp, а не npn. С другой стороны, а что мне тогда мешает просто инвертировать сигнал в другую сторону?
Собственно, надо будет разобраться в этом вопросе, то есть, просто сделать и проверить как это работает.
Теги: Дневник
<< Ранние записи | Поздние записи >>