Search
Write a publication
Pull to refresh
33
0
Дмитрий @xverizex

Разработчик

Send message

Извиняюсь, новость не читал, но помню как microsoft советовала выкидывать компьютер на свалку, если там windows 10, так как в ноябре (вроде) закончится поддержка этой версии. Тоже мне любовь Windows love Linux. Понятное дело, что это компания, но так нагло советы такие давать, я был поражен. Можно любой Linux поставить и пользоваться тем же самым, что и раньше.

Я вот думаю так, если ты хочешь учить технологию, то учи её и пиши на C. Если хочешь уметь программировать на C++, то учись программировать на нём. В итоге будет выигрывать тот, кто знает технологию, а не тот, кто много времени потратил на то, как правильно пользоваться языком, тем более, что существует риск неправильной архитектуры приложения в сложных проектах. Не знаю как на C++, но один стример рассказывал, что работал java программистом и у них контора обонкротилась из-за того, что архитектор сделал неправильную архитектуру, то-есть сначала всё шло нормально, а потом посыпалось. Хотя я и не знаю, насколько это отличается от C кода, так как совсем больших и сложных приложений я не писал. Единственное, над чем сейчас работаю, это эмуляторы NES и i386, ну и плюс игровой движок и компиляторы, но всё это на C. В NES, приходилось подолгу вписывать команды, но не думаю, что здесь сложная архитектура. Сложная наверное будет, когда мой эмулятор i386 начнет обрастать всеми нужными модулями или приложения для реверса, которое должно не только отображать код, но и анализировать и декомпилировать.

В целом, мне нравиться, что у Линуса такой принцип. Хоть, кто-то говорит, что на C++ не стал бы писать редактор для рисования, я всё же сделал его. Только там сейчас сегфолтится, но я пока не хочу исправлять. А так, он работал несколько месяцев без нареканий. https://flathub.org/apps/io.github.xverizex.RetroSpriteEditor

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

Возможно, что я осилю проект, ведь эмулятор NES у меня получилось сделать, хотя и не весь и ещё предстоит много работы. Вот ссылка на i386 эмулятор, если что, я сначала делаю по обычаю для Linux, а потом и для других платформ. https://github.com/xverizex/i386_emulator

386? Intel i386? А что такое 2350? Я недавно занялся разработкой эмулятора i386. Пока два дня прошло с тех пор.

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

Интересно, как это всё происходит? Они же почти буквально всё исследовали у червя. Как работают его нейроны? Может он полагается на чувствительность света при приближении и от этого делает свою реакцию. Тематика реверса и эмуляции меня заинтересовала совсем недавно, но делаю я что более простое, эмулятор NES. Хоть для меня это и сложный проект, но в масштабах того, что они делают червя, мой проект просто пылинка. Они же занимаются реверсом живого организма, до чего же это возвышенно!

Да, ещё задумка такая, что я реализую её в виде библиотеки. Её можно даже в свою игру встроить будет или на железо, arm, arduino, pic, думаю, что научусь для них это делать.

Как непроста и приятна работа программиста!

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

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

Следующая статья может вам тоже не понравиться, там вся статья с описанием как я искал баг, вот, только что выпустил.

https://habr.com/ru/articles/877372/

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

Прошу прояснить чем эмуляция "чужой" системы команд принципиально отличается от вирутальной байт-код машины ?

Дискуссию не читал, но могу ответить как понимаю данный вопрос. Эмуляция NES к примеру требует соблюдения ждать определенное время, пока такты циклов пройдут, а это значит, что нужно ждать какое-то время. Если сделать так, чтобы выполнялось как можно быстрее код, то игра будет очень быстро играться и мы увидим, что игра ведет себя не так как на реальных консолях. В эмуляции байткода, например как в java, там уже не нужно ждать циклы процессора, там просто надо как можно быстрее выполнить код и поэтому затрачиваются средства на то, чтобы код выполнялся как можно быстрее. Я так думаю.

Может вы заглянули в дизассемблер, или хотя бы проверили производительность?

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

Да, раньше смотрел в дизассемблер как switch устроен, даже в ссылке, что вы в godbolt привели, там видно, что с оптимизацией в -O3 конечно будет быстрее. Я же смотрел на код, который был всегда без оптимизации. Вот код запуска из массива функций, решил тоже в оптимизации -O3 скомпилировать.

  ─└─└────> 0x000057f0      0fb75304       movzx edx, word [rbx + 4]   ; cpunes.c:664  uint16_t real_pos = emu->cpu.PC - 0x8000;
  │ ╎ ╎││   0x000057f4      6681c20080     add dx, 0x8000
  │ ╎ ╎││   0x000057f9      488b05c8d1..   mov rax, qword [obj.pnes_handler] ; cpunes.c:666  pnes_handler [emu->mem[real_pos]] (emu); ; [0x129c8:8]=0
  │ ╎ ╎││   0x00005800      4889df         mov rdi, rbx
  │ ╎ ╎││   0x00005803      0fb7d2         movzx edx, dx
  │ ╎ ╎││   0x00005806      0fb69413b0..   movzx edx, byte [rbx + rdx + 0x114b0]
  │ ╎ ╎││   0x0000580e      ff14d0         call qword [rax + rdx*8]

Я хотел сам оптимизировать код, без компилятора. Мне нравиться заниматься оптимизацией и я не уверен, что лучше делать обычный код через switch, кто знает как для arm или arduino компилятор поведет себя. Хотя для arm есть gcc, но для arduino наверное другой компилятор. Хотя так то да, в switch можно было бы инлайнить прямо в case все функции. Но инлайнинг обозначает, что код будет разрастаться, вместо того, чтобы вызывать функцию с одинаковым кодом. Хотя в моем случае я использую макросы, так что код итак будет такой какой есть.

Я сейчас борюсь с тем, чтобы сделать код как-то компактнее и не сильно смотрю на оптимизирующий компилятор. Если бы не вычет из 0x8000, то кода было бы меньше, так как над всего лишь нужно было бы получить указатель на массив функций и вызывать её.

Думаю, что вы правы, но я переделывать в switch уже точно не буду. На тот момент мне показалось, что идея с массивом функций будет работать быстрее. Тогда код был проще. И опять же я не смотрел на оптимизацию со стороны компилятора.

Спасибо за такой содержательный совет. Очень интересно будет всё это реализовать.

Вот эта статья! Как мне нравиться как вы справляетесь с разными задачками и в конце концов добиваетесь рабочей версии девайса!

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

Есть ли на нём возможность программировать?

Расскажите об этом поподробней, очень интересно для чего это!

Меня восхищают ваши познания в электронике. Очень и очень полезно владеть умением менять схему под свои нужды.

Вы не думали на FPGA реализовать свою архитектуру и играть с ней?

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

Спасибо, что своим вопросом вдохновляете.
Да и все присутствующие в комментариях очень порадовали меня, мотивация очень сильная, я рад, что ностальгия есть у людей по тем временам.

Я её читаю, чтобы усвоить базу, узнать какая защита была раньше. Это же знания.

Information

Rating
Does not participate
Location
Сургут, Тюменская обл. и Ханты-Мансийский АО, Россия
Date of birth
Registered
Activity

Specialization

Software Developer, Application Developer
Middle
From 180,000 ₽
Git
Linux
MySQL
Java
English
C
Assembler
Reverse development
Win32 API
OpenGL