LINUX.ORG.RU

Разработка эмулятора продолжается

 ,


1

1

Вот как уже месяц работы и отдыха, я продолжаю разрабатывать эмулятор NES. Видео здесь vkvideo. Чтобы справиться с правильным фоновым отображением бекграунда, я рисовал квадраты и пытался математически высчитать правильный мегатайл. Для спрайтов сделал рисование за фоном и после фона. Также сегодня добавил возможность играть на джойстике, но пока немного неправильно иногда обрабатывает, например, не всегда поворачивается направо или влево после прыжка с бегом. Но я понимаю в чём тут дело и исправлю в ближайших обновлениях. Играть пока можно только за одного игрока и только в самую первую игру марио bros, который без маппера.

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

Ответ на: комментарий от Vsevolod-linuxoid

Попытаюсь ответить на ваш вопрос как я это вижу со своей точки зрения, а не с точки зрения большинства, потому как я могу более точно описать всю суть и весь строй своего естества, способного к обучению.

Первым делом, я хочу заниматься разработкой электроники. Сижу я значит дома каждый день, а на улицу выхожу погулять только для прогулки, а остальное время я нахожусь в обучении, если не мешает инвалидность. Обучение моё складывается из чтения книг, рисования и разработки ПО.

Первым делом я хотел делать игры, и придумал 3d игру про инженера программиста, который ходит с отладчиком и взламывает электронные замки и перепрограммирует прошивки техники. Для этого я захотел написать эмулятор. Так как я ни разу не писал эмуляторы, то выбор пал на процессор i386. Скачав две книги, одну документацию, другую гайд по системного программированию для i386, я распечатал и отнёс в сервис, чтобы мне сшили все листы в две книги. Прочитав немало страниц, я понял, что на первое время мне будет тяжело вот так вот сходу реализовать работу сложного процессора, и в то время я ещё не мог выполнять скучную работу, которая так и напрашивалась, отдаляю меня от получения удовольствия от работы.

Тогда я решил, но не сразу, а через какое-то время, а именно во время отдыха, что можно сделать свою архитектуру, ведь в таком случае можно будет сделать как захочешь. Тогда, поглядывая на документацию по i386 я сделал подобие 16-битного процессора и также написал для него компилятор. Получилось, что у меня за две недели был эмулятор байткода и компилятор ассемблера.

До игры было далеко, так как я в 3d математике был не силен, а так как я хочу делать на своем движке, то это ещё сильнее меня отдаляло от первоначальной цели. Тогда я задумал, что протестирую эмулятор на военной игре, которая мне явилась как откровение, когда я читал «Искусство войны». Я нарисовал в изометрии технику, реализовал её работу и прикрутил эмулятор. Компилятор можно использовать как перегнать код в файл или в буфер. Удобно очень стало тогда, написал в текстовом блокнотике код, скопировал, и вставил в игре в ImGui, нажал компилировать и эмулировать, и техника движется. Меня это впечатлило. В виду того, что у меня шизофрения и я мало начитан фантастики, а искусство войны я так и не дочитал, то я не мог продолжать продумывать военную стратегию, так как мысленный поток у меня исчерпался.

Также была попытка сделать эмуляцию лифтов, где ты программируешь прошивки лифтов, и получалась интересная игра, где ты должен был обслужить человечков, и тем сложнее уровень, если лифтов становиться больше, чем один. Тоже не доделал, так и лежит в приватном репозитории.

Когда я решил писать книгу, я начал тематику всё ту же, что и в 3d игре, и я очень сильно понял тогда, что меня мотивирует развиваться именно в электронике. Я очень хочу развиваться в этой дисциплине. Мне нравиться, как люди создают разные устройства и делятся ими с миром. Так или иначе, моё предположение насчет электроники навело на мысли, что я должен заниматься её изучением.

Так как я живу на пенсию, то денег у меня немного, но я уже собрал небольшую библиотеку по электронике, но тем не менее мне не хватает денег на нормальный осциллограф и пока у меня в имении есть только портативный, который вполне себе подходит для учебных задач. Хоть в книге и написано, что цифровую можно изучать отдельно от аналоговой, я всё-же сделал первоначальный выбор на аналоговой, но цифровую также немного почитал.

Пока я страстно желаю освоить электронику, я должен был найти себе занятие, подобающее электронщику по моему разумению. Я хотел научиться программировать для какого-нибудь чипа, но для какого? Тогда я выбрал то, что известно и хорошо документировано и можно даже проверить всё что угодно, потому что имеется в большом достатке. Тогда я взялся за программирование NES игр. Только это было давно, всё перемешалось в моей истории, потому что я несколько раз начинал изучать электронику. Но в тот первый раз, когда я только начал программировать для NES, я обнаружил, что для Linux нет редактора по рисованию, и тогда я написал свой редактор тайлов. Потом я забросил электронику, потому что совсем не хватало денег на её изучение.

Позже, через год я смог прикупить некоторые предметы и стало намного проще ею заниматься. И я вернулся к электронике, и пока я изучаю аналоговую электронику, я хотел бы поработать и с цифровой и проникнуться во все её секреты. Поэтому я взялся за более простой вариант эмуляции, это эмуляция NES. Так я становлюсь хоть на какой-то процент ближе к железу. Этот эмулятор я делаю в виде библиотеки и его можно встроить в свою игру. Позже добавлю рисование во фреймбуфер. Также есть желание сделать сборку для микроконтроллера, чтобы можно было запустить эмулятор на такой маленькой железке. В моих планах также доработать компиляторы, изучить интерфейсы UART, SPI, I2C, и другие. Позже перейду к более сложным вещам.

Когда я делал этот эмулятор, то я первые три дня писал код по 16 часов, я полюбил скучную работу, писал под классическую фортопеанную музыку. Мне нравиться эта сложная задача, особенно искать баги. Там были такие сложные баги, что я постоянно занимал свой ум и размышлял как отловить тот или иной баг. Бывало, что несколько раз в день перепроверял все функции, чтобы удостовериться, что нет багов. Мне понравилась эта работа. Сейчас работы уменьшилось и я могу уже браться за фиксы мелких багов и на это времени уходит обычно по часов 5 в день.

В остальное время я стараюсь что-нибудь читать, чтобы разум отдыхал от кода и чтобы книги учили меня говорить красиво и лаконично, а то от документации на английском и долгого сидения за компьютером у меня появлялась сложность в диалоге с людьми. Книги наполняют мой внутренний мир и появляется некий строй, который формирует мою жизнь, которую я очень люблю. Таким образом я намереваюсь прожить до старости, изобретая устройства и програмируя.

peeruoeso
() автор топика

Будут ли доступны исходники? Как насчёт упороться и сделать высокооптимизированный эмулятор NES для очень слабых устройств < 100 MHz, по типу:

Видео здесь vkvideo.

Залей видос на какой-нибудь адекватный видеохостинг, вместо этой убогой вкудахт-параши, которой пользоваться – себя не уважать. Банально MP4 файл залитый на http://0x0.st будет лучше этого дерьма что ты линканул, из-за которого твой труд невозможно посмотреть.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Будут ли доступны исходники? Как насчёт упороться и сделать высокооптимизированный эмулятор NES для очень слабых устройств < 100 MHz, по типу:

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

У меня два репозитория, один на gitverse, другой на github. Вот ссылка на github.

github

Только я хочу сам всё сделать, без посторонней помощи. Для меня это важно. Если вам покажется, что где-то в коде что-то можно порефакторить, то возможно я это и сам знаю, просто пока есть другие задачи.

Залей видос на какой-нибудь адекватный видеохостинг

Могу ещё сюда, но я уже это и так сделал. dtf

peeruoeso
() автор топика
Ответ на: комментарий от peeruoeso

Это круто, что у тебя есть мечта и ты делаешь реальные усилия по ее выполнению.

И задачу ты весьма сложную взял, надо сказать. Не думал для начала написать эмулятор Apple 1 или Sinclair ZX80? Они куда проще в устройстве.

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Не думал для начала написать эмулятор Apple 1 или Sinclair ZX80? Они куда проще в устройстве.

Не думал. Я совсем забыл про zx spectrum, а про Apple 1 вообще не знал. Если zx spectrum простоват, то, если не будет других задач, то может и его реализую. Мне вообще хотелось бы какую-нибудь студию сделать. Для NES это действительно сложнее реализовать. Было бы классно иметь программу студию по разработке для zx spectrum, где можно и код написать, и нарисовать, и эмулировать, и музыку делать, и всё это на планшете или телефоне. Думаю, что в устройстве zx spectrum будет полезно покопаться, так как это тоже будет неплохим развитием для меня.

peeruoeso
() автор топика
Последнее исправление: peeruoeso (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

И у каждого свои неповторимые проблемы. (=

Нет уж, пусть будет! Опенсорц оно про выбор. А коммерческий софт это про конкуренцию.

mord0d ★★★★★
()
Последнее исправление: mord0d (всего исправлений: 1)
Ответ на: комментарий от peeruoeso

Я не про Спектрум, я про его предка. ZX80 и ZX Spectrum разные машины. Я думал ты шаришь в ретрожелезе, раз пишешь эмулятор NES.

Не знаю, будет ли тебе интересно, но есть такой влогер The 8-Bit Guy, он довольно многое рассказывает о ретрокомпьютерах, пусть и на поверхностном уровне.

Vsevolod-linuxoid ★★★★★
()
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)

Можно посмотреть на платформы, которые бы были проще в реализации. Например, CHIP-8. Или целый жанр т.н. «fantasy consoles» - вымышленных ретро-платформ: PICO-8, TIC-80, etc.

vsnb
()
Последнее исправление: vsnb (всего исправлений: 1)
Ответ на: комментарий от vsnb

Но зачем? Оставить мой проект и перейти на другое? Нет. Тем более что я проделал довольно таки скучную работу, которую делал 3 дня. Теперь надо искать очень интересные баги, а их предостаточно.

Бывают такие баги, над которыми думаешь, как же его отловить? Это очень захватывающе, я прям люблю эту работу. Вместе, я и моя воля одержим победу и не свернём с пути истинного, даже если другие люди будут советовать заниматься другими проектами.

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

peeruoeso
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

Я думал ты шаришь в ретрожелезе, раз пишешь эмулятор NES.

Вообще не шарю, я делаю эмулятор NES, только чтобы понять железо. Ох жаль, что я не знал, что в детстве моём был zx spectrum, я бы с радостью бы проводил вечера за программированием какой-нибудь игры. Хотя наверное они были дорогие.

peeruoeso
() автор топика
Ответ на: комментарий от vsnb

Хотя это сообщение можно так же трактовать, как если кто-то другой будет читать эту тему и будет захочет тоже делать эмулятор, тогда он подумает, что выбрать.

peeruoeso
() автор топика
Ответ на: комментарий от peeruoeso

Вот ссылка на github.

Это то, о чём я подумал? А старые проекты ты поудалял?

В любом случае желаю успеха в разработке! Тебе – опыт, пользователям – возможность выбора. Это всегда хорошо.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Это то, о чём я подумал? А старые проекты ты поудалял?

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

peeruoeso
() автор топика