Pull to refresh

Создаем эмулятор приставки

Website development *
Вероятно, многие программисты если и не мечтали, то хотя бы задумывались о написании собственного эмулятора какого-либо процессора. Возможно, некоторые даже экспериментировали с чем-то вроде Z80. Но не многие дошли до финальной реализации эмулятора.



В этой заметке я хотел бы поговорить о создании простого эмулятора игровой платформы CHIP-8 из далеких 70-х. Во-первых, мы прикоснемся к истории, а во-вторых, эта платформа из за своей простоты позволит создать полностью функциональный эмулятор даже начинающим программистам.
Читать дальше →
Total votes 114: ↑111 and ↓3 +108
Views 25K
Comments 35

Принципы эмуляции на основе CHIP-8

Lumber room
Считается, что прежде чем начинать эмулировать сложные системы, нужно начать с чего-то простого, например с Chip-8. В этой статье я попытаюсь рассмотреть все аспекты того, как можно написать свою реализацию этого языка в виртуальной машине. Пойдет совсем любой язык программирования, но из-за простоты я выберу Delphi.

Подождите, не кидайтесь сразу в редактор, сначала потребуется ручка и блокнот, куда мы запишем всю важную для себя информацию. Начинается все с ее поиска. Прежде всего, это конечно Google. После получаса хождения по ссылкам мы можем увидеть, как много реализаций уже написано под любую систему, выбирай не хочу, но мы не будем подсматривать в чужие исходники, а напишем свое.
Читать дальше →
Total votes 20: ↑18 and ↓2 +16
Views 2.3K
Comments 11

Язык Go. Пишем эмулятор CHIP-8

Lumber room
Sandbox
Язык Go отпразновал недавно первый год своей жизни. Интерпретатору CHIP-8 стукнуло уже под сорок.
Любителям новых языков и старого железа посвящается этот пост — в нем мы будем писать эмулятор виртуальной машины CHIP-8 на языке Go.

О том, как настроить окружение для работы с Go писали уже не раз. За последнее время мало что изменилось, разве что версия для Windows стала более стабильной.
Установив все согласно инструкциям, приступаем к изучению внутренностей CHIP-8.
Читать дальше →
Total votes 8: ↑7 and ↓1 +6
Views 3.4K
Comments 0

Эмулятор Chip-8 для GTK+ на практике

Website development *Programming *
Sandbox
Когда был в школе и работал/играл с советскими клонами Sinclair 48К, мечтал о соседском 8086.
Когда появился 486DX66, мечтал снова о Z80. Так и пронес свою любовь к ретрокомпьютерам в настоящее. И хотя сейчас пытаюсь в железе воплотить себя как “конструктора ПК”, и даже обладая некоторой коллекцией раритетных и не очень ЦПУ, всегда хотел сделать виртуальную версию сам. Но то знаний не хватало, то ещё чего-нибудь; чаще всего — времени. В итоге решил попробовать. Мечтой был запуск СВМ для ЕС ЭВМ, да и Elite снова увидеть на чем-то, сделанном самим. Но так как дом строят с фундамента, решил начать с начала.
Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Views 7.3K
Comments 0

Собственная платформа. Часть 0.2 Теория. Интерпретатор CHIP8

Abnormal programming *Assembler *Compilers *Programming microcontrollers *
Translation

Введение


Здравствуй, мир! Сегодня у нас перевод спецификации языка CHIP8. Это статья содержит только теоретическую часть.


*COSMAC ELF во всей красе*

COSMAC ELF


Что такое CHIP8?


CHIP8 это интерпретируемый язык программирования, который был разработан Джозефом Вейзбекером (прим. перевод Joseph Weisbecker) в семидесятых для использования в RCA COSMAC VIP. В дальнейшем был использован в COSMAC ELF, Telmac 1800, ETI 660, DREAM 6800. Тридцать одна (35?) инструкция давали возможности для вывода простого звука, монохромной графики в разрешении 64 на 32 пикселя, а также позволяло использовать 16 пользовательских кнопок. Сегодня CHIP-8 часто используется для обучения базовым навыком эмуляции (не интерпретации). Интерпретаторы CHIP-8, часто по ошибке называемые „эмуляторами“, существуют на все более расширяющемся множестве платформ. Это обилие интерпретаторов связано со сходством дизайна интерпретатора CHIP-8 и эмулятора системы. Те, кто хочет разобраться в эмуляторах, нередко начинают с написания интерпретатора CHIP-8.


Читать дальше →
Total votes 11: ↑10 and ↓1 +9
Views 6.4K
Comments 4

Эмуляция компьютера: интерпретатор CHIP-8

RUVDS.com corporate blog Programming *C++ *
Translation


Меня, по ряду причин, всегда завораживала эмуляция. Программа, которая выполняет другую программу… Мне эта идея кажется невероятно привлекательной. И у меня такое ощущение, что тот, кто напишет подобную программу, не пожалеет ни об одной минуте потраченного на это времени. Кроме того, написание эмулятора — это очень похоже на создание настоящего компьютера программными средствами. Мне было очень интересно разбираться в устройстве компьютерной архитектуры, писать простой HDL-код, но эмуляция — это гораздо более простой способ ощутить себя тем, кто своими руками создаёт компьютер. А ещё, в детстве, когда я впервые увидел игру Super Mario World, я поставил себе цель, которая до сих пор не потеряла для меня ценности. Она заключается в том, чтобы полностью понять то, как именно работает эта игра. Именно поэтому я уже некоторое время подумываю о написании эмулятора SNES/SNC. Недавно я решил, что пришло время сделать первый шаг к этой цели.

Предлагаю поговорить о разработке эмулятора и обсудить простой, но полноценный пример эмуляции CHIP-8.
Читать дальше →
Total votes 39: ↑39 and ↓0 +39
Views 5.3K
Comments 1

Эмуляция компьютера: интерпретатор CHIP-8 и формирование изображений

RUVDS.com corporate blog Programming *C++ *
Translation
Недавно мы опубликовали перевод первого материала из серии статей, посвящённой эмуляции компьютера. Автор этих статей подробно рассказывает о написании интерпретатора CHIP-8 на C++. В той публикации мы устроили опрос о целесообразности перевода продолжения цикла. Почти 94% тех, кто принял участие в опросе, продолжение перевода поддержали. Поэтому сегодня мы представляем вашему вниманию второй материал о CHIP-8.


Читать дальше →
Total votes 36: ↑36 and ↓0 +36
Views 3.6K
Comments 3

Эмуляция компьютера: интерпретатор CHIP-8, графика и стриминг текстур

RUVDS.com corporate blog Programming *C++ *
Translation
В прошлый раз мы остановились на том, что создали интерпретатор CHIP-8 и оснастили его системой для формирования кадров. Видеть то, что должно попасть на экран, можно в консоли. Теперь же мы собираемся взять то, что формирует интерпретатор, вынести это за пределы консоли и показать на экране.

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



Есть много способов вывести что-либо на экран с использованием SDL. В играх, в основном, изображения не формируются, как в нашем случае, средствами CPU. Но при эмуляции и (что встречается чаще) при воспроизведении видео изображение (вполне возможно — сжатое) готовится к выводу средствами CPU. Такое изображение, для вывода его на экране, нужно загрузить в GPU. После того, как изображение попадёт в GPU, мы называем его «текстурой», а весь этот процесс называют «стримингом текстур».
Читать дальше →
Total votes 33: ↑32 and ↓1 +31
Views 2.7K
Comments 1

Эмуляция компьютера: интерпретатор CHIP-8, таймеры и обработка ввода

RUVDS.com corporate blog Programming *C++ *
Translation
Мы уже создали вполне рабочий эмулятор CHIP-8, но он, к сожалению, получился очень медленным. Почему? Если заглянуть в его главный цикл — можно увидеть, что данные на экран выводятся после выполнения каждого шага цикла. При включённом vsync SDL пытается привязать скорость рендеринга к частоте обновления кадров дисплея (возможно это — 60 Гц). Для нас это означает то, что метод SDLViewer::Update, почти при каждом его вызове, долго будет находиться в заблокированном состоянии, ожидая сигнала vsync от монитора.



Насколько быстро должен работать наш эмулятор? Точный ответ на этот вопрос дать не так уж и просто. На реальном компьютере на выполнение операций с разными кодами нужно разное время, но известны ориентировочные временные показатели выполнения различных операций. Можно выполнить инструкцию, выяснить то, сколько времени её выполнение должно занимать на реальном аппаратном обеспечении, а после этого «усыпить» программу до того момента, когда можно будет продолжать работу. Но тут есть одна проблема, которая заключается в том, что у нас, при таком подходе, нет доступа к временным параметрам работы CPU. На выполнение большинства этих инструкций должна уходить пара микросекунд, но на современных системах «усыплять» программы можно, как минимум, на одну миллисекунду.
Читать дальше →
Total votes 41: ↑41 and ↓0 +41
Views 3.4K
Comments 2

Как написать эмулятор CHIP-8 на JS

SkillFactory corporate blog Website development *JavaScript *Programming *Reading room
Translation
Tutorial
Chip-8

Автор провёл детство за играми в эмуляторах NES и SNES на своём компьютере, но никогда не думал, что однажды сам напишет эмулятор. Иван Сергеев поставил перед автором задачу написать интерпретатор Chip-8, чтобы изучить основные понятия низкоуровневых языков программирования и то, как работает процессор.

Результат — эмулятор Chip-8 на JavaScript, который автор написал под его руководством. Подробности рассказываем, пока у нас начинается курс по Fullstack-разработке на Python.
Читать дальше →
Total votes 16: ↑14 and ↓2 +12
Views 4.3K
Comments 2