LINUX.ORG.RU

Сообщения peeruoeso

 

Эмулятор для железки?

Форум — Development

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

Мой проект находится здесь. Я пока мало что смыслю в эмуляторах, и поэтому есть большие затупы. Цель данного проекта научиться писать сложный код, уметь правильно читать документацию, хороший проект в портфолио, научиться работать со схемотехникой, сделять эмулятор для моего старого проекта RetroSprite, в котором по возможности сделаю полноценную студию для разработки NES (Это если не заинтересует более интересный проект).

Сейчас проект компилируется в 84888 байт памяти, это значит, что 84 килобайта. В arduino uno всего 32 кб, плюс пишут, что 0.5 на загрузчик отводиться.

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

На chipdip например нашел микросхемы памяти на 256кб. Этого хватит, чтобы сохранить код библиотеки, но как мне кажется, что это неправильное мышление. Но, я сейчас обдумал. Я пока точно не знаю как работают прямо все игры nes, но готов рассуждать, что в nes память меняется только в ram области, а область кода не затрагивается. Если это так, то из библиотеки можно убрать в структуре место для кода и chr данные (фона и спрайтов). Если убрать эти данные и оставить только указатели, то размер файла должен уменьшиться до 43928 байт. Это всё-равно много. Там ещё нет реализации APU, а PPU занимает 0x4000 байт, хотя стой, что если для ppu взять микросхему памяти и в неё писать данные экрана, а когда надо считать что на экране, то будем читать из микросхемы памяти, так можно?

Потому что если убрать ещё 0x4000 байт, то получиться 27544 байт памяти, что уже помещается на arduino. Плюс это код оптимизированный на gcc, что будет в компиляторе для arduino не ясно. Наверное эмуляторы делают на verilog, где делаются прямо чипы, или нет?

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

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

Эмулятор пока может вот только это, но хочется капец как запустить его на железке и возрадоваться.

 ,

peeruoeso
()

Радость в разработке

Форум — Development

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

Я делаю эмулятор NES. До этого разрабатывал только вымышленные эмуляторы. Этот делать намного сложнее, но интерес к нему такой-же, а может и выше.

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

Вот вчера например искал баг

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

Потом происходят странные вещи.

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

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

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

 ,

peeruoeso
()

Как установить kolibri os?

Форум — General

Ребята, подскажите, как установить kolibri os на нетбук asus eee pc 2g. Там 2 гига жесткого диска и 256 мб оперативы. Стоит windows xp, который имеет червя автозагрузчика, записывается на флешки, чтобы распространяться.

Kolibri привлёк своим вниманием малым количеством памяти. С windows xp скопировал драйвера для wifi и если не буду унывать, то реверсну драйвер, если такое можно, и сделаю для kolibri. Попытался запуститься с simply linux, но там kernel panic.

Система 32 разрядная, не знаю что подключить, надо разметить диск и перекачать туда все файлы колибри, плюс установить загрузчик grub.

photo

 

peeruoeso
()

В разработке игра, где программируешь в машинных кодах. DECU EMU

Форум — Development

Прочитав первые две главы Криса Касперского «Техника отладки программ без исходных кодов», я вдохновился на написание простого эмулятора, где мы как в старые времена пишем в hex редакторе опкоды инструкций.

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

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

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

Перемещено hobbit из games

 

peeruoeso
()

Не получается примонтировать образ диска с установленной windows xp

Форум — General

Для некоторых исследований решил поисследовать windows xp. С помощью qemu-img создал raw файл для диска. Установил windows в файл.

Вот вывод.

archinaragu@pc:~/rev> file xp.hdd 
xp.hdd: DOS/MBR boot sector MS-MBR XP english at offset 0x12c "Invalid partition table" at offset 0x144 "Error loading operating system" at offset 0x163 "Missing operating system", disk signature 0x8ee08ee; partition 1 : ID=0x7, active, start-CHS (0x0,1,1), end-CHS (0x26,127,63), startsector 63, 4185153 sectors

Пробую смонтировать так.

archinaragu@pc:~/rev> sudo mount xp.hdd mnt/
mount: /home/archinaragu/rev/mnt: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.
       dmesg(1) may have more information after failed mount system call.

archinaragu@pc:~/rev> sudo mount -t ntfs xp.hdd mnt/
NTFS signature is missing.
Failed to mount '/dev/loop0': Invalid argument
The device '/dev/loop0' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

archinaragu@pc:~/rev> sudo fdisk -l xp.hdd 
Disk xp.hdd: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x08ee08ee

Device     Boot Start     End Sectors Size Id Type
xp.hdd1    *       63 4185215 4185153   2G  7 HPFS/NTFS/exFAT

archinaragu@pc:~/rev> sudo mount -t msdos xp.hdd mnt/
mount: /home/archinaragu/rev/mnt: /home/archinaragu/rev/xp.hdd is not a block device; try "-o loop".
       dmesg(1) may have more information after failed mount system call.

archinaragu@pc:~/rev> sudo mount -o loop -t msdos xp.hdd mnt/
mount: /home/archinaragu/rev/mnt: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.
       dmesg(1) may have more information after failed mount system call.

fdisk показывает, что первый раздел начинается с 64 байта. Я с помощью dd решил пропустить 64 байта и записать всё остальное.

xp.hdd1    *       63 4185215 4185153   2G  7 HPFS/NTFS/exFAT

dd if=xp.hdd of=parted.hdd seek=64

Но файл становится простым набором данных. Ах, я не правильно делал, надо было skip писать.

dd if=xp.hdd of=parted.hdd skip=64

Теперь отображается как

archinaragu@pc:~/rev> file parted.hdd 
parted.hdd: NTFS bootstrap NTLDR

Но всё равно пишет

archinaragu@pc:~/rev> sudo mount parted.hdd mnt/
mount: /home/archinaragu/rev/mnt: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.
       dmesg(1) may have more information after failed mount system call.

 ,

peeruoeso
()

Откуда можно взять мотивацию для написания эмулятора и компилятора?

Форум — Development

Собственно, сложность заключается в разработке сложного ПО. Когда я придумал игру, первое, что я хотел воплотить в жизнь, это эмулятор i386. Я скачал документацию и руководство по системному программированию.

Начал читать, и понял, что не осилю реализацию, так как эмулятор был первым. В итоге, я понял, что надо вымышленный эмулятор с компилятором делать и сделал компилятор похожий на x16 intel. Работа выполняется в режиме реального времени без сегментов. Это всё, на что я способен пока в данном контексте. Вот ссылка на группу, где я хотел собрать сообщество вокруг моей игры https://vk.com/radio_attack. Также писал статью на хабре о том, как придумывал игру. https://habr.com/ru/articles/838522/. Вся сложность в том, что мне не достает мотивации, хотя может это стало следствием болезни, в том, что эндорфинов не хватает, то-есть их хватает, но лекарство их отбирает.

Я выложил в открытый доступ компилятор байткода https://gitverse.ru/archinaragu/DOXY_ASM, только нормальный релиз написан в ветках elevators и radio_attack. Там для каждой игры есть свои дополнительные операторы, которые присуще игре. А вот эмулятор https://gitverse.ru/archinaragu/DOXY_EMU, мне нравиться, что я сделал возможность для эмулятора выполняться на определенное количество операторов, а потом даёт возвращение обратно в игровой движок. Так, стало возможным запускать в игре сразу несколько юнитов, каждый со своей эмуляцией.

Ещё плюс такого эмулятора в том, что, когда происходит прерывание, то обработку прерывания мы уже в игре задаем и нам доступны все регистры, которые передаются от эмулятора. Так, я хотел сделать ещё одну игру про программирование лифтов, пишешь прошивку, люди вызывают лифт и он должен правильно двигаться на нужный этаж. https://habr.com/ru/articles/843708/.

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

Вот и у меня было сначало желание изучить программирование, а потом электронику. Я раньше был на этом форуме, у меня был нечитаемый ник, но потом совсем уж плохо стало с моей психикой и мне врачи объявили, через год лечения, что у меня шизофрения. Вообще я рад любому исходу своей судьбы, и хотелось бы, пока я живу нормально, работать над интересными и сложными проектами. Хотелось бы научиться черпать правильно мотивацию в создании сложных ПО, где не требуется математический аппарат, хотя я и математику хочу нормально освоить тоже, при должной мотивации конечно. Например, я входновился и потратил 4 дня на создание логических элементов из транзисторов в Logisim Evolution https://vk.com/album583070625_305118291 .

Потом, читая книгу по цифровой электронике и архитектуре компьютера, я как раз наткнулся на все элементы и их транзисторные схемы, но прежде чем читать это, я хотел сам сначала попробовать создать, хотя раньше, когда только увлёкся этим, я сделал сумматор, хотя называл его калькулятором, на этих элементах, очень интересно. https://vk.com/photos583070625?z=photo583070625_457239228%2Fphoto_feed583070625 . Вообще я восхищен такой деятельностью и людьми, которые в силу своего интеллекта могут делать потрясающие устройства на электронике и писать для них прошивки. Когда я только начал электронику изучать, я подумал, что надо пока тренироваться в разработке для какого-нибудь чипа, я взялся за изучение NES разработки на ассемблере.

В туториале была программа, которую я не мог найти в интернете, видимо удалили, и я написал свой вариант для рисования NES графики, так как для Linux я не нашел редактора для рисования, а aseprite не отвечал нужным параметрам, а именно я не понимал как рисовать для фронта и бэкграунда, то решил написать свою версию редактора графики для NES со всеми вытекающими для неё ограничениями.

Тогда я сделал https://flathub.org/apps/io.github.xverizex.RetroSpriteEditor и выложил на flathub. Единственное, что меня остановило дальше разрабатывать, это опять мотивация, так как в плане развития в электронике у меня произошел затык, я не понимал как правильно учиться. Хотя успел удобство в редакторе сделать, чтобы бэкграунд экспортировался в код в двух вариантах, либо полный экран экспортировался, либо только те спрайты, которые имелись на экране, отсюда было ограничение в том, что если экспортировать код только с теми элементами, которые имеются, то надо было хранить, если я правильно помню, два байта, или три даже, которые отвечали бы за его позицию.

В целом, разработка мне нравиться, и мне бы хотелось уйти в разработку электроники, эмуляторов и компиляторов. Обучаюсь самостоятельно. Работы нет. Если правильно придумать мотивацию, то можно было бы сделать потрясающий проект. Например для вымышленного эмулятора у меня была мотивация сделать игру. Игру же первую, которую я хотел сделать, была про программиста, который ходит с отладчиком и взламывает разные устройства, пишет на ассемблере, делает битхаки в прошивках, меняет код прошивок, сс помощью написания нового кода.

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

Вот недавно недели три не хотелось вообще читать, а сегодня взял книгу Мишеля Монтеля «Опыты» и с удовольствием почитал пару глав. Я вот реализовать i386 никак не получается. Да, вспомнил, возможно надо на мелкие задачи разложить большую задачу, и может быть тогда получиться. Наверняка, у вас, у спецов, кто работает в сфере embedded разработки или чего-то подобного, есть какие-то ритуалы, как не бросать проект. Если у вас есть что-то полезное, поделитесь пожалуйста, очень хотелось бы работать дальше над сложными проектами.

 , ,

peeruoeso
()

RSS подписка на новые темы