Эмуляция игровой приставки
Обзор существующих эмуляторов. Выбор языка программирования. Технические характеристики консоли игровой. Карта памяти и спрайты. Архитектура процессора игровой приставки. Структурная схема картриджа. Скроллинг изображение. Кадровый синхроимпульс.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 28.08.2016 |
Размер файла | 957,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Введение
Консоль игровая NES (Nintendo Entertainment System), в России, распространялась с помощью организации Стиплер (Steepler) и называлась Dendy. Денди была аппаратным клоном японской версии. Эта консоль (TV приставка) имела разрядность 8 бит, и была очень популярна в мире начиная с 1985 года и до выхода Mega Drive (Genesis), а в России с начала девяностых и до выхода Play Station 2.
Данная приставка была разработана в Японии в 1983 году и называлась Famicom, а в 1985 году, изменив название на N.E.S. и поменяв дизайн и форм-фактор картриджа, вышла в Соединенных Штатах Америки. Приставка вышла настолько революционной, что завоевала, в том числе за неимением конкуренции, игровые рынки всех стран. Для данной приставки насчитывается огромное количество официальных (и множество неофициальных) игр, в том числе Super Mario Bros и The Legend Of Zelda, которые становится визитной карточкой Nintendo, а сам Марио становится главным персонажем Nintendo и усиленно эксплуатируется по сей день, немало влияя на решение пользователя покупать консоль. Статистика гласит, что за все время существования данной приставки было продано свыше шестидесяти миллионов аппаратов и более пятьсот миллионов копий игр. Приставка вышла во время кризиса игровой промышленности, возродила рынок игр и начала третье поколение консолей, поскольку технические возможности консоли и большое количество игр возбудили интерес потребителей и разработчиков, сложивших руки во время кризиса. Нельзя не упомянуть еще и о том, что качество игр было намного выше предыдущих консолей.
В начале девяностых годов влияние NES снизилось, поскольку были разработаны 16-битные консоли, такие как Mega Drive (Genesis). Главный конкурент Genesis - Super NES превосходила N.E.S., и пользователи предпочли покупать ее. Первое время Nintendo поддерживала NES. в Америке и выпустила новую версию приставки с редизайном и исправлением недостатков аппарата (в основном это касалось способа загрузки картриджа в консоль). После 1995 года, из-за уменьшения продаж и прекращения разработки игр, NES в Америке перестало поддерживаться. В Японии же Famicom выпускался до конца 2003 года.
В наши дни данная приставка вновь набирает популярность с помощью эмуляторов, которые позволяют играть в игры со старинных консолей на ПК и более современных консолях. Для этого нужен эмулятор и образ картриджа с игрой. Несмотря на то, что прошло много лет, многие старые игры до сих пор пользуются огромным спросом.
За последние несколько лет резко возрос интерес к «ретрогеймингу». В России, то поколение, детство которых пришлось на девяностые годы помнят "ТВ приставки Денди" и Mega Drive как неотъемлемую часть своего детства и многие предпочтут провести вечер за игрой из детства.
Эмулятор - это набор символов кода, предназначенный для имитации одного устройства (операционной системы) на другом, отличающейся от эмулируемого устройстве (операционной системе) стремясь получить по возможности более полное совпадение с работой эмулируемой системы (устройства). В данном случае производится эмулирование поведения ТВ приставки на персональном компьютере. Цель - максимально возможная точность воспроизведения работы.
Обычный домашний компьютер во второй половине девяностых годов стал достаточно мощным, чтобы запустить на эмуляторе первое поколение приставок. С тех самых пор начали появляться бесплатные эмуляторы, написанные энтузиастами. Чаще всего эмуляторы были недоработанными и эмулировали заданную систему не в полном объеме. Очень немногие производители давали населению доступ к документации и спецификациям консолей, поэтому разработчики доходили до всего самостоятельно, занимаясь так называемой "обратной разработкой". Более всего данных было получено о консолях Nintendo, поэтому большее распространение получили эмуляторы NES, SNES и GameBoy. К тому же консоли NES были настолько малотребовательны к аппаратной начинке компьютера, что их эмуляторы были распространены повсеместно.
В процессе роста известности эмуляторов появилась возможность запускать игры, которые выпускались эксклюзивно для какой-либо страны (обычно Японии) и имели физическую защиту картриджа (несоответствие формы корпуса) и были выпущены для другого телевизионного формата (PAL, SECAM, NTSC). Появились тематические сообщества, посвященные любительскому переводу и "ромхакингу". Так же эмулятор позволяет познакомиться (или поностальгировать) с играми, вышедшими десятки лет назад, не покупая игровой консоли.
эмулятор программирование игровой картридж
1. Обзор существующих эмуляторов
Существует множество эмуляторов NES. Далее рассмотрены самые популярные из них по данным сайта emu-land.net.
Первый эмулятор игровых приставок NES и Famicom по количеству загрузок это FCEUX (149600 загрузок). Позволяет эмулировать не только оригинальную NES, но и её неофициальные клоны. Помимо стандартных функций, FCEUX предоставляет возможность взлома эмулируемых игр (rom-hacking). FCEUX работает с ром-файлами таких форматов как NES и FDS. Эмулятор поддерживает игру в оконном и полноэкранном режиме. Эмулирует до четырёх контроллеров, а также имеет возможность игры через Интернет. FCEUX имеет фильтры для графики и автоматически переключает регионы - PAL и NTFS. Поддерживает расширенные настройки для аудио и видео, а также запись видео. Этот эмулятор поддерживает сохранения, как и многие другие эмуляторы.
Второй эмулятор это VirtuaNES (81980 загрузок). Этот японский эмулятор приставок форматов NES и FDS для Windows, имеет множество функций, а именно имеет фильтры видео, поддержку turbo-кнопок, ускорение и замедление эмуляции, эмулирует световой пистолет с помощью мыши. Эмулятор реализует более 140 мапперов. Как и предыдущий эмулятор, позволяет записывать игровой процесс. С японскими играми имеет особенно хорошую совместимость. Так же, он имеет множество функций для отладки ром-файлов.
Nestopia (78000 загрузок) позволяет делать скриншоты во время игры, и записывать аудио и видео без потери качества. Можно назначить кнопки контроллера на клавиатуре и сохранить их в отдельном профиле. Эмулятор автоматически переключается между регионами NTSC и PAL.
Jnes (51600 загрузок). Считается самым простым и точным эмулятором для ОС Windows. Для работы эмулятор использует DirectX в качестве аппаратного интерфейса. Jnes использует службу Kaillera для онлайн игры, а также позволяет использовать чит-коды. Использует качестве светового пистолета компьютерную мышь.
Это далеко не полный список существующих эмуляторов NES. Так как все остальные эмуляторы имеют одинаковые функции, которые обычно ограничиваются возможностью изменять кнопки управления и сохранения игры, нет смысла рассматривать их отдельно.
Эмулятор -- это очень большой и сложный проект, выполнить который в рамках дипломного проекта невозможно. Поэтому цель этого проекта разработать прототип эмулятора, с базовыми функциями и возможностью доработки.
Для достижения этой цели, нужно решить несколько задач, а именно: собрать сведения об игровой консоли NES, выбрать язык программирования, который будет использован в проекте, разработать сам проект, написать код, провести тестирование.
Сначала необходимо найти и изучить все возможные данные о системе. К этим данным относится полная информация о технических характеристиках процессора, видеопроцессора, данные о способах ввода/вывода и многое другое. Такая информация доступна в сети Internet в виде статей разработчиков-энтузиастов, которые исследовали консоль путем обратной разработки. Компания Nintendo распространяла только общую информацию о своих продуктах.
1.1 Выбор языка программирования
Конечно, существует множество эмуляторов, которые написаны на таких языках, как JavaScript или Visual Basic и других. Однако эмулятор должен максимально копировать быстродействие системы, и из-за таких серьезных требований можно рассматривать только два языка: Ассемблер и C/C++.
Рассмотрим преимущества использования ассемблера:
· программа может максимально копировать быстродействие эмулируемой системы;
· при эмуляции могут использоваться непосредственно регистры процессора системы, на которой будет работать эмулятор;
· многие команды эмулируемого процессора могут быть заменены аналогичной командой процессора компьютера.
Недостатки использования ассемблера:
· большой объем кода, что затрудняет его изменение и отладку;
· такие программы очень трудны для понимания;
· программа-эмулятор становится непереносима. что бы использовать программу на другом компьютере, ее придется полностью переписывать.
Далее рассмотрены достоинства и недостатки использования C/C++.
Достоинства:
· программы легко отлаживать;
· не придется полностью переписывать программу для использования на другом компьютере;
· код удобочитаемый и его легко модифицировать для добавления новых функций.
Недостатки:
· программа имеет меньшее быстродействие по сравнению с программой на ассемблере;
· скомпилированная программа имеет больший размер.
Учитывая вышеизложенные факторы для данного проекта будет использован язык C/C++.
После того как все сведения о консоли NES собраны, можно приступить к разработке. Работа над проектом делится на несколько частей.
Базовая программа: реализует главный цикл эмуляции, а именно запускает все его модули - виртуальный процессор, эмуляцию видео и аудио устройств, и внутренний отладчик.
Виртуальный процессор - считывает команды из ПЗУ эмулируемой системы и выполняет их на процессоре компьютера.
Виртуальное видео устройство отрисовывает изображение на экране. Вывод спрайтов производится с помощью свободной библиотеки SDL. Этот модуль обрабатывает спрайты, а именно: работает с флагами и создает прерывание для виртуального процессора NES.
Модуль ввода и вывода считывает введенную информацию с клавиатуры и преобразует ее в сигналы виртуального контроллера, которые будут восприниматься и обрабатываться виртуальным процессором.
Виртуальное аудио устройство создает звуковое сопровождение. Этот модуль программы очень сложен в отладке, так как требует высокой синхронизации.
Встроенный отладчик позволяет в любой момент проверять содержимое регистров и памяти путем остановки выполнения программы
2. Архитектура
Игровая консоль Денди является неофициальным клоном NES и Famicom. Далее будет рассматриваться именно Денди, так как это наиболее известная вариация данной приставки в России. Приставка подключается к телевизору и использует его как дисплей.
Денди работает с микропроцессором, который является аналогом 6502, и работает во взаимодействии с видеопроцессором. Центральный процессор и видеопроцессор имеют свои собственные независимые адресные пространства. Звуковой процессор представлен в виде встроенного в центральный процессор сопроцессора pAPU. Каждый из этих устройств имеет свою оперативную память. Всю систему сопрягают множество "мелких" микросхем. В самой приставке нет никакой постоянной памяти. Программы хранятся на сменных ПЗУ.
ПЗУ хранится в сменном картридже. В тем хранятся сама программа в виде кодов для исполнения процессором и видеопамять. Некоторые картриджи позволяют сохранять на них данные по средствам дополнительной памяти. модели картриджей отличаются объемом встроенного ОЗУ, поэтому могут не работать на разных приставках. Также приставки отличаются способом формирования видеосигнала - либо в формате PAL, либо NTSC. Эти приставки имеют разные параметры. Поэтому картридж, с пометкой «NTSC only», не будет работать с приставкой формата PAL.
2.1 Технические характеристики
Центральный процессор:
· Тип: аналог 6502;
· Разрядность шины данных: 8 бит;
· Разрядность шины адреса: 16 бит;
· Тактовая частота: 1,773447 МГц.
Память:
· ОЗУ: 2Кб;
· ПЗУ: отсутствует;
· Видеопамять: 2Кб.
Видеопроцессор:
· Тип графики: спрайтовая;
· Разрядность шины адреса: 14 бит;
· Разрядность шины данных: 8 бит;
· Количество спрайтов: 64;
· Размер спрайтов: 8x8 или 8x16;
· Разрешение: 256x240 точек;
· Количество цветов всего: 52;
· Одновременно на экране: 16.
2.2 Структурная схема
Схема компонентов консоли указана на рисунке 1. главным компонентом консоли является процессор (CPU). все консоли, использующие стандарт nes, используют аналог микропроцессора 6502.
Звуковой сопроцессор находиться на том же кристалле что и центральный. в оригинальной схеме NES применен звуковой процессор с четырьмя аналоговыми каналами и одним цифровым. Однако почти все консоли, которые продавались в России, были клонами, которые производили в Корее или Тайвани, поэтому цифрового канала они не имеют.
Контроллер DMA, осуществляющий доступ напрямую к памяти, также расположен на кристалле ЦП.
Геймпады и прочие устройства, которые подключаются к приставке через модуль входа и выхода, представлены двумя буферными регистрами.
В отдельном модуле помещено ОЗУ 2Кб, в нем хранится стек процессора, переменные и данные.
Рисунок 1. Структурная схема NES
Вывод изображения на экран осуществляется видеопроцессором (PPU). данные изображения хранятся в видеопамяти (VRAM) 2 Кб. с основной эта память не пересекается и доступна только с помощью регистров PPU. в Видеопроцессоре формируется сигнал, подающийся на выходной узел консоли.
С помощью модулятора аудио- и видеосигналы преобразуются в сигнал высокой частоты для телевизора.
Контроллеры снабжены кнопками и микросхемой, передающей данные процессору.
Картридж, подключенный с помощью разъема с 60 контактами (или с 72 в оригинальной NES), является ПЗУ. Размер ПЗУ может быть от 16 до 256 Кб. В картридже хранятся сама игра, и видеопамять.
ОЗУ (SRAM) с дополнительным питанием от батарейки, куда сохраняется игровой прогресс, когда консоль выключена, тоже располагается в картридже. Для использования всех ресурсов видеопроцессора, некоторые картриджи оснащены ПЗУ (VRAM) или ОЗУ (VROM) для графического процессора.
Если размер ПЗУ в картридже больше 32 Кб, то обязательно присутствует дополнительный контроллер (маппер) для переключения страниц памяти (МВС).
3. Процессор
В этом разделе рассмотрена архитектура процессора данной игровой приставки, ее архитектура, регистры, система команд, прерывания пространства адресов.
Модель NES была сконструирована на базе аналога микропроцессора 6502. Все последующие модификации полностью совместимы с ней сверху вниз.
Итак - CPU 6502 имеет:
· Шина адреса: 16 бит;
· Адресное пространство: 64Кб;
· Шина данных: 8 бит;
· Частота (для версии PAL): 1,773447 МГц;
· Частота (для версии NTSC): 1,7897725 МГц;
· Встроенный pAPU: 4 аналоговых и 1 цифровой канал;
· Контроллер DMA.
Данная модель имеет общее адресное пространство для кода и данных. В этом процессоре не предусмотрено инструкций для работы с портами ввода и вывода. Эти порты должны отражаться на адреса памяти. Это значит, что адресное пространство ЦП разделено между портами и памятью. В таблице 1 представлено деление пространство адресов процессора:
Таблица 1. Адресное пространство процессора
Адрес |
Размер |
Назначение |
|
$0000-$07FF |
2Кб |
RAM |
|
$0800-$1FFF |
6Кб |
RAM Mirror (x3) |
|
$2000-$2007 |
$8 = 8 байт |
Registers Video |
|
$2008-$3FFF |
$1FF8 = 8184 байта |
Registers Video Mirror (x1023) |
|
$4000-$4017 |
$20 = 32 байта |
Registers Audio & DMA & I/O |
|
$4018-$4FFF |
$0FE8 = 4072 байта |
Not used |
|
$5000-$5FFF |
4Кб |
Expansion ROM (for MMC5) |
|
$6000-$7FFF |
8Кб |
SRAM (WRAM) |
|
$8000-$BFFF |
16Кб |
PRG-ROM (1) |
|
$C000-$FFFF |
16Кб |
PRG-ROM (0) |
Встроенное ОЗУ (RAM) - это 2Кб памяти. Используется для хранения данных во время выполнения программы. При выключении питания содержимое этой области уничтожается. ОЗУ имеет следующее распределение:
· "Нулевая страница” (адреса с $0000 по $00FF) - предназначена для системных целей. Существуют отдельные инструкции для быстрого доступа к этой области памяти.
· Аппаратный стек (адреса с $0000 по $00FF) для старших адресов размером 256 байт
· Пользовательская область (адреса с 0200 по $07FF)
Начиная с адреса $0800 расположены «зеркала» ОЗУ. Это означает, что обращаясь к ячейке $0000 мы обращаемся к $0800, $1000 или $1800.
Далее 8 регистров видеопроцессора (Registers Video). с их помощью производится связь ЦП с видеопамятью и видеопроцессором. затем, начиная с адреса $2008 идут «зеркала» видеопроцессорных регистров.
Далее 24 регистра для аудио, контроллера прямого доступа и портов входа и выхода. остальные ($0FE8=4072шт.) адреса не назначены, но могут использоваться внешними аудио процессорами, расположенными в картридже.
Расширение ОЗУ (для MMC5) - 4кб. используется только маппером MMC5.
Область SRAM(WRAM) объемом 8кб - статическое ОЗУ, находящееся на картридже. Используется для выполнения любых задач и является для процессора полноценным ОЗУ обычно в этом месте сохраняются данные для текущей карты (с помощью маппера MMC3). для сохранения прогресса игры микросхему питает батарейка, поэтому есть возможность сохранить данные при выключении приставки.
PRG-ROM - это 2 окна по 16кб (или другое распределение - в зависимости от маппера). Чтобы разобраться в назначении этих областей памяти нужно знать устройство картриджа. самый простой картридж имеет две области ПЗУ 32кб и 8кб, подключенные к процессору и видеопроцессору соответственно (см. рисунок 1). Первая область ПЗУ именуется PRG-ROM, и содержит коды операций и, по возможности, данные. Первые 16кб этой области отображаются в окне 1 ($8000-$BFFF), последние 16кб отображаются в окне 0 ($C000-$FFFF). Организуются они на уровне схемотехники. В окончании окна 0 расположены векторы процессорных прерываний. с помощью мапперов пространство $8000 - $FFFF делится на более чем два окна (например, в MMC3 - для более удобного изменения адресации памяти картриджа).
Как указано выше, в рассматриваемой приставке процессор аналогичен процессору 6502, который разработала компания MOS Technology. Но в отличии от этого процессора, у процессора для приставки отсутствует десятичный режим для арифметических команд.
ЦП передает другим устройствам данные с помощью адресной шины (16 бит), шины данных (8 бит) и управляющей шины. 16 бит адресной шины дают возможность микропроцессору использовать 64Кб памяти.
Адресное пространство внешних устройств распределено процессором так же, как и память в общем пространстве адресов процессора. Структурная схема ЦП консоли представлена на рисунке 2.
Рисунок 2. Структурная схема процессора
Регистры:
ЦП управляет целыми 8-разрядными числами. в нем содержится 6 программных регистров. Из них 5 - 8-разрядных, и 1 -16-разрядный счетчик.
A - накопительный регистр или аккумулятор. Как и многие другие архитектуры - 6502 является «накопительной», то есть в операциях так или иначе участвует аккумулятор.
PC - это единственный регистр ЦП, который содержит 16 бит. Он хранит адрес инструкции в ПЗУ, которую нужно выполнить процессору. ЦП консоли считывает инструкцию, выполняет команду и увеличивает значение счетчика. Некоторые инструкции позволяют изменять содержимое регистра и тем самым задать нужный порядок исполнения команд, находящихся в памяти.
S - указатель вершины стека. В него можно заносить данные. При возникновении и обработке прерывания или вызове подпрограммы, в этом регистре сохраняется адрес для возврата. Стек расположен в странице памяти (0100h - 01FFh). Поэтому для записи адреса достаточно 8 бит. Стек увеличивается от адреса 01FFh до 0100h.
P - регистр состояния. содержит информацию о выполненных вычислениях и флаги, указывающие на режим работы процессора. Регистр состоит из 8 бит, каждый из которых является флагом. Можно изменить режим работу ЦП посредством изменения этих флагов. Структура регистра состояния указана на рисунке 3.
Рисунок 3. Структура регистра состояния
Далее необходимо рассмотреть назначение отдельных разрядов регистра.
Флаг С - «Carry» - выполняет задачу флага переноса, он используется для сложения или вычитания. Разряд С регистра состояния равняется 1, если результат сложения больше 255 (OFFh) или если результат вычитания меньше 0. Поэтому этот флаг является дополнительным разрядом аккумулятора, позволяющий выполнять арифметические операции с числами, разрядность которых больше 8 бит.
Флаг Z - «Zero» - флаг нулевого результата, он является 1, если результат выполнения команды 0.
Флаг I - «Interrupt» - флаг прерываний, устанавливается и сбрасывается командами процессора SEI и CLI. Этот флаг, установленный в 1, не разрешает процессору работать с запросами прерываний, поступающие по линии IRQ. подробнее эта тема рассматривается в описании системы прерываний процессора.
Флаг D - «Decimal» - флаг десятичного режима. Микропроцессор консоли не поддерживает работу арифметических действий в двоично-десятичном коде, поэтому состояние этого флага не влияет на работу процессора. таким образом можно использовать этот бит для своих нужд. Состояние флага меняется программным образом командами SED и CLD. Оригинальный процессор 6502 разрешает складывать и вычитать как в двоичном, так и в двоично-десятичном коде. Если флаг D равен 0, то операнды команд сложения и вычитания рассматриваются двоичными и десятичными числами, а если установлен в 1 - как двоично-десятичные.
Флаг В - «Break» - флаг программного прерывания, устанавливается при выполнении команды BRK.
Флаг V - флаг переполнения. Равен 1, если результат арифметической операции над числами со знаком выходит за разрешенные пределы или если при выполнении арифметической операции выполнялся перенос из шестого разряда в седьмой.
Флаг N - флаг знака, равняющийся седьмому разряду результата арифметической операции.
Центральный процессор Денди способен выполнять 56 различных команд. Все команды процессора делятся на следующие основные группы:
· команды пересылки данных: LDA, STA, LDX, STX, LDY, STY, TAX, TAY, ТХА, TYA, TSX, TXS;
· команды арифметических операций: INC, DEC, INX, I NY, DEX, DEY, ADC, SBC;
· команды логических операций: AND, ORA, EOR;
· команды сравнения: CMP, CPX, CPY, BIT;
· команды сдвига: ASL, ASR, ROL, ROR;
· команды перехода: BCC, BCS, BEQ, BNE, BMI, BPL, BVC, BVS, JMP;
· команды работы с подпрограммами: JSR, RTS;
· команды управления процессором: CLC, SEC, CLD, SED, CLV, CLI, SEI, RTI, BRK, NOP;
· команды работы со стеком: РHА, PHP, PLA, PLP.
Процессор обрабатывает три независимых друг от друга запроса на прерывание. В таком случае работа программы останавливается, в стеке сохраняется регистр состояния процессора и последнее значение программного счетчика, после чего из памяти считывается вектор прерывания.
Вектор прерывания - адрес программы, которая должна выполняться каждый раз, когда ЦП получает запрос на прерывания от внешних устройств. считав из памяти вектор прерывания, процессор заносит его в программный счетчик и выполняет процедуру обработки прерывания. Рассмотрим типы прерываний и методы их обработки.
Маскируемое прерывание IRQ. Процедуру работы с этим прерыванием ЦП выполняет всякий раз, когда получает сигнал низкого уровня по шине IRQ, если флаг I в регистре состояния сброшен. Эту процедуру тоже можно вызвать, выполнив команду процессора BRK. В случае программного прерывания до начала его обработки в регистре состояния процессора устанавливается флаг В.
При выполнении запроса на прерывание в стеке сохраняются состояния программного счетчика и регистра состояния процессора, после чего исполняется программа, адрес начала которой записан в ячейках FFFEh и FFFFh. Для возврата из прерывания применяют команду RTI. При этом из стека считываются записанные значения регистра состояния процессора и программного счетчика, а затем продолжается выполнение приостановленной программы. В обычной конфигурации консоли сигнал запроса маскируемого прерывания IRQ выведен на разъемы расширения и картриджа, но игры используют только возможность программного прерывания при исполнении команды BRK.
Немаскируемое прерывание NMI. Это самый важный запрос на прерывание в консоли. Любая программа содержит процедуру его обработки.
Каждый раз, когда заканчивается отрисовка кадра (50 раз в секунду для PAL и 60 раз в секунду для NTSC), на переднем фронте кадрового гасящего импульса видеопроцессор формирует запрос немаскируемого прерывания и посылает его процессору.
Процессор прерывает исполнение программы, сохраняет в стеке значения программного счетчика и регистра состояния, после чего выполняет процедуру обслуживания немаскируемого прерывания, адрес которой записан в ячейках памяти FFFAh и FFFBh. Возврат из процедуры обработки осуществляется также командой RTI. значение этого прерывания для игровой приставки объясняется тем, что процессор может обмениваться данными с видеопамятью только тогда, когда формируется кадровый гасящий импульс, начало которого вызывает запрос на прерывание. итак, программа обработки немаскируемого прерывания в любой игре осуществляет запись в регистры видеопроцессора и пересылку заранее приготовленных данных в видеопамять.
Сброс микропроцессора. Данное прерывание происходит при включении консоли и при поступлении низкоуровнего сигнала на вход RESET. При этом процессор копирует в программный счетчик содержимое ячеек памяти с адресами FFFCh, FFFDh и выполняет программу. Состояние регистров процессора не изменяется.
Как уже отмечалось, центральный процессор приставки способен обращаться к 65536 ячейкам памяти с адресами от 0000h до FFFFh. Однако в связи с упрощенной схемой дешифрации адреса реальный объем памяти, используемой видеоприставкой, гораздо меньше.
Рассмотрим распределение адресного пространства приставки (рисунок 4) и назначение основных блоков.
Рисунок 4. Адресное пространство процессора
Адреса 0000h - 07FFh: здесь располагается встроенное ОЗУ приставки, используемое для хранения переменных во время работы программы, а также нулевая страница памяти и стек процессора. При выключении питания содержимое этой области памяти теряется.
Адреса 0800h - OFFFh: обращение по любому из указанных адресов приведет к обращению к встроенному ОЗУ приставки, следовательно, адрес 0800h аналогичен адресу 0000h, адрес 0801h- адресу 0001h и т.д.
Адреса 1000h - 17FFh: то же, что и для адресов 0800h - 0FFFh.
Адреса 1800h - 1FFFh: то же, что и для адресов 0800h - 0FFFh.
Адреса 2000h - 2007h: регистры видеопроцессора.
Адреса 4000h - 4016h: регистры звукового процессора, контроллера прямого доступа к памяти (ПДП) и контроллера ввода/вывода.
Адреса 5000h - 5FFFh: в стандартной конфигурации не используются, предназначены для модулей расширения.
Адреса 6000h - 7FFFh: оперативная память картриджа. Может отсутствовать.
Адреса 8000h - BFFFh: переключаемый банк постоянной памяти программ картриджа. В простейших картриджах не применяется.
Адреса С000h - FFFFh: не переключаемый банк постоянной памяти программ картриджа. Присутствует в любом картридже независимо от размера памяти. По этим адресам всегда подключаются последние 16 Кб ПЗУ картриджа. В шесть ячеек ПЗУ с адресами FFFAh - FFFFh записаны адреса процедур обслуживания прерываний.
4. Видеопроцессор
Видеопроцессор (PPU) рассчитан на работу в одном из стандартов (PAL/NTSC) -в российских консолях- это PAL. NTSC - цветное аналоговое телевидение, принятое в США, Японии, Южной Корее и некоторых других азиатских странах.
PPU формирует «готовый» низкочастотный видеосигнал, который напрямую (или через усилительный каскад) подается на видеовыход и на вход модулятора антенного сигнала.
Итак - PPU имеет:
· Шина Адреса - 14 бит (адресное пространство 16кб) + 256 байт отдельно адресуемой памяти спрайтов;
· Шина Данных - 8 бит;
· Количество цветовых оттенков всего - 64;
· Одновременно на экране - до 25 (любые из 64), до 13-и для фона, и до 12-и для спрайтов;
· Количество спрайтов на экране - 64 (не более 8-и на линии);
· Разрешение выводимой картинки (PAL/NTSC) - 256x240 / 256x224;
· Частота регенерации (PAL/NTSC) - 50Гц/60Гц;
Данный видеопроцессор рассчитан на блочную графику с использованием спрайтов. Информация об изображении хранится в видеопамяти, которая не входит в адресное пространство процессора. Доступ к видеопамяти осуществляется через регистры видеопроцессора.
Зачастую в картридже находится отдельный блок видеопамяти, подключаемый вместо встроенной. Это сделано для ускорения работы видеопроцессора и улучшения графики.
Различия между PAL- и NTSC-версиями консоли проявляются при выводе данных на экран. В системе PAL размер картинки составляет 256x240 точек. В NTSC разрешение - 256x224 точки. Информация об изображении, не входящем в кадр, остается в видеопамяти, но не появляется на экране.
От этого длительность кадрового гасящего импульса изменяется, что может привести к несовместимости между версиями устройства.
Рассмотрим более подробно структуру видеопамяти игровой приставки и процесс формирования изображения на экране телевизора
5. Карта памяти
Таблица 2. Адресное пространство видеопроцессора
Адрес |
Размер |
Назначение |
|
$0000-$0FFF |
4k |
CHR-ROM Знакогенератор 0 (На картридже) |
|
$1000-$1FFF |
4k |
CHR-ROM Знакогенератор 1 (На картридже) |
|
$2000-$23BF |
$3C0 = 960 байт |
VRAM Экранная страница 1 - Символы (в приставке) |
|
$23C0-$23FF |
$40 = 64 байта |
VRAM Экранная страница 1 - Атрибуты (в приставке) |
|
$2400-$26BF |
$3C0 = 960 байт |
VRAM Экранная страница 2 - Символы (в приставке) |
|
$27C0-$27FF |
$40 = 64 байта |
VRAM Экранная страница 2 - Атрибуты (в приставке) |
|
$2800-$2BBF |
$3C0 = 960 байт |
VRAM Экранная страница 3 - Символы (На картридже) |
|
$2BC0-$2BFF |
$40 = 64 байта |
VRAM Экранная страница 3 - Атрибуты (На картридже) |
|
$2C00-$2FBF |
$3C0 = 960 байт |
VRAM Экранная страница 4 - Символы (На картридже) |
|
$2FC0-$2FFF |
$40 = 64 байта |
VRAM Экранная страница 4 - Атрибуты (На картридже) |
|
$3000-$3EFF |
$F00 = 3840 байт |
VRAM Mirror of $2000-2EFF |
|
$3F00-$3F0F |
$10 = 16 байт |
Палитра фона (в регистрах PPU) |
|
$3F10-$3F1F |
$10 = 16 байт |
Палитра спрайтов (в регистрах PPU) |
|
$3F20-$3FFF |
$E0 = 224 байт |
Not used |
Карта распределения адресного пространства видеопроцессора представлена на таблице 2.
Видеопроцессор может работать с 16 Кб памяти в диапазоне адресов 0000h-3FFFh. Однако, как и в случае с центральным процессором, объем реально присутствующей памяти гораздо меньше: он составляет всего 2Кб.
В видеопамяти несколько областей, имеющих различное назначение. Далее рассмотрено, как они влияют на формирование изображения.
Обычно в ПЗУ картриджа содержится один или несколько заранее записанных знакогенераторов. Микросхема контроллера управления страницами памяти включает один из них в адресное пространство видеопроцессора, и все его символы становятся доступными для вывода на экран.
В адресном пространстве видеопроцессора находятся четыре экранные страницы. Однако памяти хватает только для двух экранных страниц, одна из которых активная. Каким образом программы используют эти страницы, будет объяснено ниже. Каждая экранная страница подразделяется на область символов и область атрибутов.
Активная экранная страница - это страница видеопамяти, содержимое которой необходимо для формирования изображения на экране.
Область символов - часть экранной страницы, содержащая информацию о номерах элементов знакогенератора, на основе которых создается изображение.
Область атрибутов - часть экранной страницы, где находятся сведения о цвете элементов знакогенератора, из которых создается изображение.
Область символов каждой экранной страницы содержит 960 байт и является сеткой из 30 строк по 32 символа в каждой. Таким образом, размер экрана равен 256x240 точек.
Важное отличие NTSC-версии состоит в том, что верхний и нижний ряды символов на экране не отображаются и размер изображения по вертикали уменьшается до 224 точек.
допустим, что на экран нужно вывести букву «А», битовый образ которой уже находится в знакогенераторе по адресу 0100h (см. рисунок 5). Если активна первая экранная страница, то запись числа 01h в видеопамять по адресу 2000h приведет к выводу буквы в верхнем левом углу экрана (только в PAL-версии).
Рисунок 5. Структура экранной страницы
Сразу после области символов начинается область атрибутов экранной страницы, занимающая 64 байта. Каждая ячейка области атрибутов содержит информацию о цвете четырех соседних квадратов размером 2x2 символа, которые образуют квадрат 4x4 символа. Таким образом, два младших бита ячейки области атрибутов первой экранной страницы, имеющей адрес 23C0h содержат данные о цвете для символов, находящихся в ячейках области символов первой экранной страницы с адресами 2000h, 2001h, 2020h и 2021h.
Структура экранной страницы показана на рисунке 6.
• а - область символов;
• б - область атрибутов.
Чтобы получить номер цвета точки, изображенной где-нибудь на экране, требуются два бита из подходящего байта атрибутов и два бита из битового образа, хранящегося в знакогенераторе. В итоге получается 4-разрядное число в диапазоне 0-15, задающее номер цвета в палитре.
Рисунок 6. Формирование цветовой информации
Внутренней видеопамяти достаточно только для размещения двух экранных страниц. Это приводит к появлению эффекта, называемого отражением экранных страниц. Четыре случая отражения рассмотрены ниже. Горизонтальное отражение. при этом попарно объединяются экранные страницы 0, 1 и 2, 3, таким образом запись в экранную страницу 0 аналогична записи в экранную страницу 1.
Вертикальное отражение. В этом режиме объединяются экранные страницы 0, 2 и 1, 3. Запись в экранную страницу 0 аналогична записи в экранную страницу 2.
Режим одного экрана. при этом используется одна экранная страница с установленным номером.
Режим четырех экранов. Если в картридже имеется дополнительное ОЗУ для видеопроцессора, то можно обрабатывать все четыре экранные страницы. Режим отражения экранных страниц видеопамяти целиком зависит от контроллера страниц памяти в картридже. Внутренние схемы видеопроцессора не разрешают менять этот режим. Некоторые контроллеры страниц памяти меняют его путем записи кода в управляющий регистр при выполнении программы.
Палитра
PPU содержит регистры палитр (которые адресуются через адресное пространство PPU). Существует 2 палитры - палитра фона ($3F00-$3F0F) и палитра спрайтов ($3F10-$3F1F). с помощью палитры происходит выбор любых 16-ти цветов из 64-х возможных для вывода на экран (в ячейку палитры заносится номер цвета (00h-3Fh) -- см. рисунок 7).
Рисунок 7
Задний план - холст, окрашенный цветом с индексом 0 из палитры фона.
Фоновый рисунок - картинка, составленная из иконок знакогенератора (как из мозаики 32x30). Фоновый рисунок хранится в экранной странице (VRAM). В области символов - 960 байт (32x30) должны быть записаны номера иконок знакогенератора фона (см. регистр $2000 - бит 4). На экране отображается содержимое активной экранной страницы (см. регистр $2000 - бит 1,0). Экранная страница содержит только информацию о фоновом рисунке. Знакогенератор содержит иконки с двумя младшими битами цвета для каждого пикселя иконки. Два старших бита цвета - общие для всей иконки, берутся из области атрибутов экранной страницы. Полученное четырехбитное число определяет номер цвета в палитре фона. Таким образом, каждая иконка (без смены палитры) может иметь до четырех вариантов раскраски. Т.е. при помощи двух бит из области атрибутов экранной страницы - палитра фактически разбивается на 4 части (по 4 цвета в каждой), номер части определяется битами области атрибутов, номер цвета (внутри части) - битами пикселя в знакогенераторе.
6. Память спрайтов
Это отдельная страница памяти видеопроцессора, содержащая информацию об особых блоках с графикой - спрайтах.
Память спрайтов занимает 256 байт, которые не включены в адресное пространство видеопроцессора. Для каждого из 64 спрайтов, которые может обрабатывать видеопроцессор, отведено по четыре байта.
В этих байтах находится следующая информация:
Таблица 3
Байт записи |
Биты |
Назначение |
|
0 |
Абсолютная координата верхнего левого угла спрайта по вертикали. |
||
1 |
Номер иконки из знакогенератора |
||
2 |
Атрибуты спрайта |
||
7 |
Отражение спрайта относительно вертикальной оси. 0 - Обычный; 1 - Зеркальный |
||
6 |
Отражение спрайта относительно горизонтальной оси. 0 - Обычный; 1 - Зеркальный |
||
5 |
Приоритет спрайта. 1 - Спрайт перед фоном; 0 - Спрайт за фоном |
||
4 - 2 |
Не используются |
||
1 |
Два старших бита цвета (аналог атрибута цвета для фона) |
||
3 |
Координата верхнего левого угла спрайта по горизонтали. |
На одной линии экрана может помещаться не более 8 спрайтов. При написании программ необходимо помнить об этом ограничении.
На экране спрайты находятся в соответствии с приоритетом. Если поместить в одно и то же место два спрайта, верхним окажется спрайт с меньшим номером. Номер спрайта определяется расположением его описания в памяти спрайтов. Таким образом, данные о спрайте 0 занимают первые четыре байта памяти спрайтов, о спрайте 1 - вторые четыре байта.
Информация в память спрайтов может быть записана напрямую через регистры видеопроцессора или с помощью контроллера прямого доступа к памяти.
Рисунок 8. Объединение экранных страниц
Видеопроцессор может плавно прокручивать фоновое изображение в вертикально или горизонтально независимо от спрайтов.
При вертикальной прокрутке две экранные страницы объединяются в изображение размером 256x480 точек, которое можно перемещать вверх или вниз.
При горизонтальной прокрутке две экранные страницы объединяются в изображение размером 512x240 точек, которое перемешается вправо или влево. Выбор способа отражения экранных страниц, описываемых выше, зависит от используемого аппаратного скроллинга. Скроллинг осуществляется с помощью записи значения смещения в специальный регистр видеопроцессора.
Организация экранной памяти при аппаратной прокрутке изображения показана на рисунке.
Доступ к видеопамяти осуществим только с помощью регистров видеопроцессора при его программном выключении или во время кадрового гасящего импульса.
Рассмотрим процесс формирования изображения.
Генерация кадра начинается с левого верхнего угла и происходит построчно вниз. По окончании вывода каждой строки к сигналу добавляется строчный синхроимпульс. Таким образом отображаются все 240 строк, составляющие полный экран. В конце видеопроцессор посылает одновременно кадровый синхроимпульс и сигнал немаскируемого прерывания NMI. Это занимает время, нужное для вывода четырех строк. потом видеопамять становится доступной во время формирования кадрового синхроимпульса. этот период равен времени, необходимому на вывод 20 телевизионных строк, после чего доступ к видеопамяти прекращается и начинается развертка нового кадра. Такой процесс повторяется 50 раз в секунду для PAL и 60 раз в секунду для NTSC.
Всю работу по формированию изображения на экране центральный процессор осуществляет, передавая данные видеопроцессору через регистры управления и получая данные из регистров контроля состояния видеопроцессора. Назначение регистров описано ниже.
Регистр 1 управления видеопроцессором
Адрес: 2000h.
Тип: запись.
Назначение разрядов:
D7 - формирование запроса немаскируемого прерывания NMI при кадровом синхроимпульсе:
0 - запрещено;
1 - разрешено.
D6 - не используется, должен быть равен 0.
D5 - размер спрайтов:
0 - 8x8 точек;
1 - 8x16 точек.
D4 - базовый адрес знакогенератора для формирования фона:
0 - 0000h;
1 - 1000h.
D3 - базовый адрес знакогенератора для формирования спрайтов:
0 - 0000h;
1 - 1000h.
D2 - приращение адреса при обращении к видеопамяти:
0 - увеличение адреса на 1 (горизонтальная запись);
1 - увеличение адреса на 32 (вертикальная запись).
D1, DO - адрес активной экранной страницы:
00 - 2000h;
01 - 2400h;
10 - 2800h;
11 - 2C00h.
Регистр 2 управления видеопроцессором
Адрес: 2001h.
Тип: запись.
Назначение разрядов:
D7 - D5 - яркость экрана/интенсивность цвета (не используется).
D4 - управление отображением:
0 - спрайты не видны;
1 - спрайты выводятся.
D3 - управление отображением:
0 - фон не отображается;
1 - фон отображается.
D2 - задание области вывода спрайтов:
0 - спрайты невидимы в крайнем левом столбце из 8 точек;
1 - спрайты видны на всем экране.
D1 - определение области вывода фона:
0 - фон невидим в крайнем левом столбце из 8 точек;
1 - фон присутствует на всем экране.
DO - тип дисплея (не используется).
Регистр состояния видеопроцессора
Адрес: 2002h.
Тип: чтение.
Назначение разрядов:
D7 - флаг кадрового синхроимпульса:
1 - видеопроцессор генерирует кадровый синхроимпульс;
0 - видеопроцессор формирует изображение.
Разряд устанавливается при получении кадрового синхроимпульса и сбрасывается при окончании формирования синхроимпульса или после чтения содержимого регистра.
D6 - флаг обнаружения спрайта 0:
1 - спрайт с номером 0 выведен на экран;
0 - спрайт с номером 0 не обнаружен.
Разряд становится равен 1, когда видеопроцессор начинает вывод на экран спрайта с номером 0 (первый в памяти спрайтов). Например, если координата спрайта 0 по вертикали равна 42, то разряд будет установлен во время показа 42-й строки кадра. Сброс разряда происходит при генерации кадрового синхроимпульса или после чтения содержимого регистра.
D5 - счетчик количества спрайтов на линии:
1 - больше 8 спрайтов на текущей линии;
0 - 8 или меньше спрайтов на текущей линии.
D4 - разрешение записи в видеопамять:
1 - запись запрещена;
0 - запись разрешена.
Регистр адреса памяти спрайтов
Адрес: 2003h.
Тип: запись.
Назначение разрядов.
В регистр записывается 8-разрядное значение кода, определяющее адрес в памяти спрайтов для последующего доступа через регистр 2004h.
Регистр данных памяти спрайтов
Адрес: 2004h.
Тип: запись/чтение.
Назначение разрядов.
Через регистр осуществляется доступ к памяти спрайтов видеопроцессора. Начальный адрес устанавливается путем записи значения кода в регистр 2003h. После каждого обращения к регистру адрес автоматически увеличивается на 1.
Регистр аппаратной прокрутки
Адрес: 2005h.
Тип: двойная запись.
Назначение разрядов.
В регистр последовательно помещаются два кода для осуществления аппаратной прокрутки фонового изображения. Первое записываемое значение передается в регистр вертикальной прокрутки, второе - горизонтальной. Эти значения определяют смещение графического фрагмента от начала экранной страницы. При работе с данной функцией видеопроцессора следует помнить, что эффект отражения экранных страниц не позволяет одновременно использовать вертикальную и горизонтальную прокрутки, если в картридже нет дополнительной видеопамяти.
Регистр адреса видеопамяти
Адрес: 2006h.
Тип: двойная запись.
Назначение разрядов.
В этот регистр последовательно помещаются два байта 16-разрядного адреса для последующего доступа к видеопамяти через регистр 2 007h. Сначала записывается старший байт адреса, затем младший.
Регистр данных видеопамяти
Адрес: 2007h.
Тип: запись/чтение.
Назначение разрядов.
Через регистр осуществляется доступ к видеопамяти. Начальный адрес записывается в регистр 2006h. После каждого обращения к регистру адрес автоматически увеличивается на 1 или на 32 - в зависимости от состояния разряда D2 регистра 2000h. Из-за особенностей конструкции видеопроцессора первое чтение из видеопамяти после установки нового адреса дает неверный результат.
При записи данных в видеопамять и при работе с палитрами (адреса 3F00h - 3FlFh) рассмотренная особенность не проявляется. Следует также помнить, что любой доступ к видеопамяти возможен только в момент формирования кадрового синхроимпульса.
Прямой доступ к памяти
Существует более быстрый способ записи в память спрайтов - запись через контроллер DMA. Контроллер DMA занимает в адресном пространстве CPU один адрес - $4014. При записи в этот порт числа $XX, контроллер DMA отправляет в память спрайтов содержимое 256-ти ячеек памяти, начиная с адреса = $XX x $100. (Например, при записи в регистр контроллера DMA $02 - в память спрайтов отправится содержимое ячеек $0200-$02FF). В программах рекомендуется использовать именно этот способ записи - как наиболее быстрый (около 100мкс.)
7. Картридж
Денди спроектирована так, что вся программа и все данные хранятся исключительно на картридже. Сама приставка не содержит никакой постоянной памяти. Картридж устанавливается в специальный разъём, на который выведены как шины CPU, так и PPU. До сих пор мы использовали модель картриджа, содержащую 32k PRG-ROM и 8k CHR-ROM. Такие картриджи применяются для хранения небольших игр - их память полностью адресуются CPU и PPU. Для большинства же игр такой объём явно недостаточен - поэтому большинство картриджей имеют значительно больший объём памяти (до 1024k PRG-ROM и 1024k CHR-ROM). Понятно, что непосредственно процессор не может адресовать такой объём памяти. В Денди применяется метод «страничной адресации» памяти картриджа. Картриджи большого объёма содержат, помимо микросхем памяти, еще и переключатель страниц («mapper»). Маппер - контроллер (или логическая схема), состояние которого однозначно определяет блоки ПЗУ картриджа, отображаемые в данный момент в адресное пространство процессора, или знакогенератор PPU. Размер переключаемых окон зависит от типа маппера, а с некоторыми мапперами может даже варьироваться, типичные конфигурации - 4*8k, 2*16k или 1*32k (возможны и иные конфигурации - причем, как правило последнее окно неперключаемое).
Видов мапперов существует очень много (наиболее распространены около десяти) - каждый из них имеет свои возможности: вид и объём используемой в картридже памяти, возможность использования дополнительной памяти, наличие звукового процессора и пр., а также имеет свои (уникальные) команды управления. Большим количеством модификаций «классических» мапперов мы обязаны «пиратам» - стремящимся либо с сэкономить на железе, любо запихнуть на один картридж много всего разного, иногда же - и то и другое сразу.
Рисунок 9. Структурная схема картриджа
PRG-ROM - микросхема ПЗУ, хранящая программу и данные (неотъемлемая часть любого картриджа). Подключается к шинам процессора. Старшие линии адреса и управляющие входы подключаются к мапперу (если маппер предусматривает переключение страниц PRG-ROM).
CHR-ROM (RAM) - микросхема памяти, подключаемая к шинам PPU - возможен один из двух вариантов:
ПЗУ (ROM) - хранит заранее «прошитые» знакогенераторы PPU, которые могут переключаться, если это предусматривает маппер. Подключается к шинам PPU и мапперу (если маппер предусматривает переключение страниц знакогенератора).
ОЗУ (RAM) - статическая память, размером 8k (два знакогенератора). В этом случае знакогенераторы должны хранится в PRG-ROM и программно (через PPU) загружаться в CHR-RAM. Преимуществом такой организации является то, что есть возможность изменения одной иконки знакогенератора, при сохранении всех остальных. В предыдущем случае имелась возможность только выбирать заранее созданные знакогенераторы (если их несколько).
Mapper - контроллер или логическая схема, осуществляющая коммутацию блоков реальной ПЗУ в адресные пространства CPU и PPU. Находится на картридже и подключается к шинам CPU и/или PPU. Некоторые мапперы состоят из нескольких микросхем. Любая программа пишется под определенный тип маппера.
Также картридж (в редких случаях) может содержать:
SRAM (WRAM) - (Адресное пространство CPU $6000-$7FFF) - Статическое ОЗУ, может питаться от компактной батарейки, располагающейся на картридже. Предназначено для «сохранения» игр (если есть батарейка), или просто служит дополнительным ОЗУ (хорошее дополнение). Для него выделено «окно» в адресном пространстве CPU размером 8k (в 4 раза больше встроенного в приставку ОЗУ) - существуют картриджи, содержащие до 32k ОЗУ (т.е. 4 страницы, переключаемые маппером). Данное расширение поддерживается далеко не всеми мапперами, но точно поддерживается MMC1, MMC3 и MMC5 (MMC5 - достаточно редкий картридж).
Expansion ROM - (Адресное пространство CPU $5000-$5FFF) - Дополнительные 4k памяти (для CPU). Аналогично SRAM - используется, как правило, с маппером MMC5.
VRAM - (Адресное пространство PPU $2800-$2FFF) - «Недостающие» 2k VRAM для двух экранных страниц PPU. (Используется очень немногими играми.)
Мапперов существует бесчисленное множество - наиболее часто используемые - около десяти. Каждый маппер принято называть своим условным названием. Для совместимости дампов и эмуляторов, каждый маппер имеет номер, в соответствие с заголовком iNes.
Документация на мапперы от разработчиков игр недоступна. Однако существует «неофициальная» документация на сайте wiki.nesdev.com.
Каждому мапперу соответствует номер, который хранится в заголовке картриджа.
В адресном пространстве CPU - адреса $8000-$FFFF выделены для отражения на них памяти картриджа - PRG-ROM. Логически может быть организовано несколько окон, управляемых маппером. Размер и количество окон определяется архитектурой маппера, некоторые типы предусматривают переменный размер окна. Наиболее распространенный вариант 2*16k или 4*8k - в последнее окно позиционируется, как правило «хвост» ПЗУ (иногда начало), а также, зачастую, последнее окно переключению не подлежит.
Каждый маппер имеет определенное количество регистров управления, доступных только для записи. Адресуются они через области, отведенные для PRG-ROM. То есть - чтение из памяти по адресам $8000-$FFFF приводит к чтению ПЗУ (PRG-ROM), а запись, по некоторым адресам из этого диапазона приводит к записи управляющих слов в соответствующие регистры маппера.
Заключение
Результатом данной работы является программа-эмулятор игровой приставки NES. Так как реализация полноценного эмулятора -- это очень большой проект, который требует гораздо большего количества времени, чем отведено для выполнения дипломной работы, итогом является прототип эмулятора, которые реализует только базовые функции.
Во время работы над проектом были реализованы следующие задачи: эмуляция процессора, эмуляция графического процессора, эмуляция портов ввода/вывода (контроллеров), эмуляция сменных картриджей (ПЗУ). А также несколько популярных мапперов. Звуковой процессор и встроенный отладчик не были реализованы из-за ограниченности времени на работу. Однако реализованных функций достаточно, для воспроизведения на эмуляторе множества популярных игр.
Первостепенная задача, которая нуждается в доработке в этом проекте это доработка звукового процессора для создания звукового сопровождения. Реализация этого модуля - очень сложная задача, так как эта часть эмулятора наиболее критична к качеству синхронизации.
Далее следует реализовать простые, но необходимые функции, такие как переназначение кнопок контроллера, сохранение и загрузка игрового процесса, простой и удобный графический интерфейс для подключения образов картриджей и настроек звука и видео.
...Подобные документы
Анализ моделей и средств построения игровой компьютерной среды предметной области. Разработка алгоритмов построения игровой компьютерной среды. Отладка и экспериментальное тестирование компьютерной игры "Представление знаний в информационных системах".
дипломная работа [2,9 M], добавлен 12.08.2017Изучение истории развития и становления 3D-технологий с середины XX века до нашего времени. Основные инструменты 3D-программы. Игры как направление современного компьютерного дизайна. Способы применения 3D-технологий в оформлении игровой составляющей.
курсовая работа [7,3 M], добавлен 14.10.2016Создание игровой программы, реализующей игру в бильярд на компьютере. Математическое описание законов физики, определяющих траекторию движения шаров по бильярдному столу. Существующие аналоги разрабатываемого продукта. Алгоритмы игровой программы.
контрольная работа [31,3 K], добавлен 25.07.2012Разработка игровой программы "разгадывания кроссворда". Создание схемы хранения данных, изучение возможности среды программирования. Требования к функциональным характеристикам, составу и параметрам технических средств, информационной совместимости.
курсовая работа [403,9 K], добавлен 26.03.2015Знакомство с основными особенностями развития игровой индустрии. Создание компьютерных игр как одна из прикладных сфер программирования. Общая характеристика набора методов класса Area. Рассмотрение способов создания игры "Змейка", анализ этапов.
курсовая работа [799,4 K], добавлен 13.06.2013Понятие и условия поиска патентного обзора. Компоненты вычислительной системы: игровая станция и факторы выбора, процессор, серверные модули памяти, SSD накопитель, оптический привод, блок питания. Разработка игровой станции и принципы ее работы.
курсовая работа [1,4 M], добавлен 29.06.2014Разработка игрового "движка" с использованием языка C++ для написания кода, графического пакета DirectX9 для вывода графики. Использование физического "движка" PhysX для взаимодействия объектов. Технико-математическое описание задачи, листинг программы.
дипломная работа [4,5 M], добавлен 02.09.2013Создание игровой системы "Тетрис": количество игр, режимы сложности, интерфейс пользователя, игровая статистика, обработка исключений. Структура входных и выходных данных. Диаграммы и описание классов. Блок-схема алгоритма программы, результаты ее работы.
курсовая работа [1,9 M], добавлен 13.06.2012Входные и выходные данные программы. Выбор языка программирования. Рабочая среда Delphi 7. Правила игры "Кости". Разработка пользовательского интерфейса. Экономическое обоснование программного продукта. Расчет расходов на содержание и эксплуатацию.
дипломная работа [960,6 K], добавлен 07.02.2016Общая характеристика игровых стратегий в жанре "башенная защита". Анализ GUI как графического пользовательского интерфейса, особенности его реализации. Математический подход в обеспечении игрового баланса. Реализация баланса в игре жанра башенной защиты.
курсовая работа [125,0 K], добавлен 16.07.2016Игровые технологии; назначение, классификация и цель создания мобильных игр. Развлекательные, коммуникативные, терапевтические, диагностические функции игровой деятельности. Создание мобильного программного приложения "Angry Crane" в среде Java Android.
курсовая работа [1,5 M], добавлен 09.12.2014Архитектура персонального компьютера, функциональные и технические характеристики его устройств. Компоненты материнской платы, строение процессора, виды памяти. Принципы работы процессора и обращение к данным. Пути развития персонального компьютера.
курсовая работа [102,4 K], добавлен 11.02.2011Основные этапы разработки игровой системы "Тетрис", создание игр "Стройка" и "Гонки" на основе тетриса в трех режимах сложности: сложный, средний, легкий. Особенности контейнеров, итераторов, обработка исключений, описание основных классов и алгоритмов.
курсовая работа [1,4 M], добавлен 22.06.2012Разработка полноценной правильно функционирующей игровой программы "Парные картинки", изучение процедур и функций. Использование масштабируемых средств для построения баз данных. Компоненты Delphi в программе. Описание пользовательского интерфейса.
курсовая работа [1,3 M], добавлен 13.07.2012Игровой движок Unity, его использование для создания приложений, связанных с архитектурой, обучением, визуализацией данных и электронными книгами. Разработка системы освещения для работы с двухмерными объектами в виде расширения редактора Unity.
дипломная работа [2,5 M], добавлен 11.02.2017Компьютерная графика и визуализация данных, методы и средства создания и обработки изображений с помощью программно-аппаратных вычислительных комплексов. Понятие виртуальности, примеры применения игровой графики: пространство, спрайты, воксели, полигоны.
реферат [29,0 K], добавлен 03.06.2010Анализ предметной области разрабатываемого программного продукта. Разработка интерфейса пользователя и структурной схемы игровой программы "Крестики-нолики". Отладка и тестирование. Проведение исследования компонентов программной среды Borland Delphi 6.0.
курсовая работа [660,4 K], добавлен 08.03.2015Процессор как важная часть компьютера. Частота центрального процессора. Встроенный контроллер памяти. Основные технические характеристики мониторов. Технологический процесс изготовления процессора. Основные группы стандартов и рекомендаций на мониторы.
реферат [17,2 K], добавлен 01.04.2010Общие характеристики смарт-карт. Архитектура микросхемы: компоновка элементов микрокомпьютера смарт-карты, размещение процессора, памяти, периферийных модулей, блока ввода-вывода. Комплексный подход к обеспечению информационной безопасности смарт-карт.
курсовая работа [423,9 K], добавлен 26.11.2013Створення схеми електричної принципової МР-3 програвача – приставки до ПК, структурної та загальної схеми. Призначення проектуємого пристрою. Принцип роботи окремих ВІС. Розробка програми тестування роботи пристрою, розрахунок надійності його роботи.
курсовая работа [527,4 K], добавлен 24.03.2009