Разработка эмулятора игрового автомата
Обзор рынка существующих эмуляторов на Android OS. Используемые языки и программное обеспечение: ассемблер, С++, Java, XML, Visual Studio 2015. Технические характеристики эмулируемой системы. Эмуляция памяти, видеочипа, аудиочипа и устройства ввода.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 28.05.2018 |
Размер файла | 265,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Пример условной компиляции, в зависимости от того инвертирован текущий объект или нет по оси x выборка пикселей осуществляется либо с начальной, либо с конечной границы представлен в листинге 4.8.
Листинг 4.8 - Компиляция в зависимости от указанного режима рендеринга
#if FLIPX == 1
"sub %1, %1, #16\n"
"vld1.32 {q1}, [%1]\n"
"vrev64.16 q1, q1\n"
"vswp d2, d3\n"
#else
"vld1.32 {q1}, [%1]!\n"
#endif
Также, благодаря набору инструкций NEON процессоров, основанных на архитектуре ARM, достигается возможность рендеринга 8 пикселей за одну операцию. В листинге 4.9 подробно рассмотрен рендеринг в режиме ARGB 1555, где итоговый пиксель формируется как сумма произведений компонентов текущего цвета умножаются с нулем, и цвета из буфера кадра с альфа компонентой текущего цвета.
Листинг 4.9 - пример рендеринга 8 пикселей
"vshr.u16 q8, q0, #10\n" // распаковка цвета из формата ARGB 1555
"vshr.u16 q9, q0, #5\n"
"vshl.u16 q10, q0, #3\n"
"vshr.u16 q0, q0, #15\n"
"vand.u16 q9, #0xff\n"
"vand.u16 q10, #0xff\n"
"vshl.u8 q8, q8, #3\n"
"vshl.u8 q9, q9, #3\n"
"vshl.u16 q0, q0, #15\n"
"vshr.u16 q13, q11, #10\n" // распаковка цвета из формата ARGB 1555
"vshr.u16 q12, q11, #5\n"
"vshl.u16 q11, q11, #3\n"
"vand.u16 q12, #0xff\n"
"vand.u16 q11, #0xff\n"
"vshl.u8 q13, q13, #3\n"
"vshl.u8 q12, q12, #3\n"
"vmul.s16 q8, q8, q2\n" // умножение компонентов на альфы
"vmul.s16 q9, q9, q2\n"
"vmul.s16 q10, q10, q2\n"
"vmul.s16 q11, q11, q3\n"
"vmul.s16 q12, q12, q3\n"
"vmul.s16 q13, q13, q3\n"
"vqadd.u16 q8, q13\n" // суммирование источника и приемника
"vqadd.u16 q9, q12\n"
"vqadd.u16 q10, q11\n"
"vshr.u16 q8, q8, #11\n" // упаковка и сохранение цвета
"vshr.u16 q9, q9, #11\n"
"vshr.u16 q10, q10, #11\n"
"vst1.32 {q10}, [%0]!\n"
Вывод данных пользователю эмулятора осуществляется с помощью библиотеки OpenGL ES. Созданное эмулятором изображение со скорость шестьдесят кадров в секунду сохраняются в текстуру, которая натягивается на четыре вершины отправляемых с помощью библиотеки OpenGL ES в устройство вывода методом TRIANGLE_STRIP «ленты треугольников». Рендеринг кадра представлен в листинге 4.10.
Листинг 4.10 - рендеринг текущего кадра
void renderFrame() {
fps++; // инкремент глобального счетчика кадров
glClear(GL_COLOR_BUFFER_BIT); // сброс текущего буфера кадров
glViewport(fx, fy, fw, fh);
glUseProgram(gProgram);
if(rotate == ROT0) {// picture w > h
// установка указателя на буфер с вершинными координатамиglVertexAttribPointer (
gvPositionHandle,
,
GL_FLOAT,
GL_FALSE,
sizeof(Vertex),
&gTriangleVerticesH->x
);
// установка указателя на буфер с текстурными координатами
glVertexAttribPointer (
gvTextureCoordHandle,
,
GL_FLOAT,
GL_FALSE,
sizeof(Vertex),
&gTriangleVerticesH->tu);
} else {
glVertexAttribPointer (
gvPositionHandle,
,
GL_FLOAT,
GL_FALSE,
sizeof(Vertex),
&gTriangleVerticesV->x
);
glVertexAttribPointer (
gvTextureCoordHandle,
,
GL_FLOAT,
GL_FALSE,
sizeof(Vertex),
&gTriangleVerticesV->tu);
}
glEnableVertexAttribArray(gvPositionHandle);
glEnableVertexAttribArray(gvTextureCoordHandle);
// выбор и установка параметров текущей текстуры
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texName);
glTexParameteri (
GL_TEXTURE_2D,
GL_TEXTURE_MIN_FILTER,
GL_NEAREST
);
glTexParameteri (
GL_TEXTURE_2D,
GL_TEXTURE_WRAP_S,
GL_CLAMP_TO_EDGE
);
glTexParameteri (
GL_TEXTURE_2D,
GL_TEXTURE_WRAP_T,
GL_CLAMP_TO_EDGE
);
glTexImage2D (
GL_TEXTURE_2D,
,
GL_RGBA,
tex_size_x,
tex_size_y,
,
GL_RGBA,
GL_UNSIGNED_SHORT_5_5_5_1,
cave->texdata
);
glUniform1i(gTextureUniform, 0);
// рисование четырех треугольников из буфера
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
// вывод на экран счетчика кадров
printFramesPerSecond();
// установка пределов видимости
glViewport(0, 0, ww, wh);
// вывод на экран элементов управления
DrawVirtualPad();
}
4.9Эмуляция аудиочипа
Управляющие регистры аудиосистемы, спроецированные в адресное пространство процессора, предоставляют контроль над аудиосистемой. Аудиосистема предоставляет возможность одновременно воспроизводить до 8 аудиоканалов с аппаратным смешиванием с различными амплитудами громкости каждого из каналов. Каждый из запущенных каналов воспроизводит звуковые семплы, упакованные с помощью собственного алгоритма сжатия производителя аудиочипа. Аудиопоток воспроизводится из памяти, содержащей аудиоданные, данные выбираются по порядковому номеру семпла.
Запись в управляющий регистр аудиосистемы изменяет параметры воспроизведения, запускает/останавливает воспроизведение аудиоканала (см. листинг 4.11).
Листинг 4.11 - запись в управляющий регистр аудиочипа
void CYMZ770::RegWrite(u8 reg, u8 value)
{
ymz770.regs[reg] = value; // смена текущих параметров аудиосистемы
// управляющий регистр 0x43 каждого из 8 каналов
// отвечает за запуск/остановку аудиканала
if ((reg & 0xe3) == 0x43)
{
u8 chan = (reg & 0x1c) >> 2;
if (value & 6)
channels[chan].StartChanel();
else
channels[chan].StopChanel();
}
if ((reg & 0x8f) == 0x81)
{
u8 sqn = (reg & 0x70) >> 4;
sequencer[sqn].state = (value & 6) ? seqStart : seqIdle;
}
}
Вывод данных пользователю эмулятора осуществляется с помощью библиотеки OpenSL ES. Выводимый аудиопоток обновляется с помощью периодического вызова функции обратного вызова, которая в свою очередь запрашивает очередные аудиоданные у эмулятора. Процесс обновления аудио буфера представлен в листинге 4.12.
Листинг 4.12 - обновление аудио буфера средствами OpenSL ES
void CYMZ770::slCallBack()
{
static int currBuffer = 0; // триггер выбирающий текущий аудиоканал
static struct SSoundSample {
s16 l;
s16 r;
} buffer[2][bufferSampleCount] = { 0 };
SSoundSample *p = &buffer[currBuffer][0];
for(int i = 0; i < bufferSampleCount; i++) {
s16 smpl = Generate(); // запрос аудиоданных
p[i].l = smpl; p[i].r = smpl;
}
// установка нового аудиоканала
(*bqPlayerBufferQueue)->Enqueue (
bqPlayerBufferQueue,
&buffer[currBuffer],
bufferSampleCount * sizeof(SSoundSample)
);
currBuffer ^= 1;
}
4.10 Эмуляция устройств ввода
Управление игровым процессом в эмулируемый системе осуществляется с помощью различных игровых манипуляторов. Манипулятор зависит от запускаемой игры, но на программном уровне данные считываются в общем формате для всех приложений с 8 битных портов ввода/вывода процессора.
Таблица 4.7 - Соответствии бита клавише игровых манипуляторов
Клавиша |
Взводимый бит при нажатии |
|
PUSH1 |
0x1000 |
|
PUSH2 |
0x2000 |
|
PUSH3 |
0x4000 |
|
PUSH4 |
0x8000 |
|
COIN |
0x0004 |
|
START |
0x0010 |
|
UP |
0x0100 |
|
DOWN |
0x0200 |
|
LEFT |
0x0400 |
|
RIGHT |
0x0800 |
Управление пользователем эмулятора возможно осуществлять с помощью «тачпада» методом перехвата события «onTouchEvent». Процесс рассмотрен в листинге 4.13.
Листинг 4.13 - перехват касаний «тачпада»
public boolean onTouchEvent(MotionEvent event) {
int x, y;
int action = event.getAction() & MotionEvent.ACTION_MASK;
int idx = getIndex(event);
switch(action) {
case MotionEvent.ACTION_DOWN :
case MotionEvent.ACTION_POINTER_DOWN:
x = (int)event.getX(idx);
y = (int)event.getY(idx);
// Передача информации эмулятору о нажатой кнопке
CaveDroid.OnTouch(event.getPointerId(idx), x, y, 1);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
//Передача информации эмулятору об отпущенной кнопке
CaveDroid.OnTouch(event.getPointerId(idx), 0, 0, 0);break;
case MotionEvent.ACTION_MOVE:
for (int i = 0; i < event.getPointerCount(); i++) {
x = (int)event.getX(i);
y = (int)event.getY(i);
// обновление информации о всех нажатых кнопках
CaveDroid.OnTouch(event.getPointerId(i), x, y, 2);
}
break;
}
return true;
}
Также, возможно управление игровым процессом с помощью игровых манипуляторов совместимых с Android OS с помощью перехвата события «dispatchKeyEvent». Процесс рассмотрен в листинге 4.14.
Листинг 4.14 - перехват аппаратных кнопок
public boolean dispatchKeyEvent(KeyEvent event)
{
switch (event.getAction())
{
case KeyEvent.ACTION_DOWN:
action = 1;
break;
case KeyEvent.ACTION_UP:
action = 0;
break;
default:
return false;
}
OnGamePadEvent(event.getKeyCode(), action);
return true;
}
Заключение
На основании проделанной работы выполнена поставленная цель: разработан эмулятор игрового автомата для устройств, работающих под управлением Android OS на базе процессоров с архитектурой ARM с удобным интерфейсом и высокой скоростью работы, обеспечена совместимость с устройствами под управлением Android OS не ниже версии 2.3.3.
Полученный продукт в дальнейшем может быть использован как база для разработки эмуляторов иных устройств, кроме того, возможен перенос готового продукта на другие платформы.
Выявлен основной фактор, ограничивающий повсеместное применение программной эмуляции для переноса приложений с одной архитектуры на другую, которым являются высокие системные требования в первую очередь к скорости центрального процессора.
В результате выполнения дипломной работы был получен опыт:
· разработки приложений для операционной системы Android;
· создания приложений для устройств с ограниченным техническими возможностями;
· получен опыт разработки приложений под архитектуру процессоров ARM, в том числе практический опыт применения набора инструкций NEON, а также изучен синтаксис ассемблера процессора;
Таким образом, задание на дипломную работу выполнено в полном объёме.
Список использованных источников
1. Голощапов, А. Л. Google Android: программирование для мобильных устройств. - СПб.: БХВ-Петербург, 2011. - 448 с;
2. Голощапов, А. Л. Google Android: Создание приложений для смартфонов и планшетных ПК. - СПб.: БХВ-Петербург, 2013. - 832 с;
3. Android для программистов: создаём приложения / П. Дейтел, Х. Дейтел, Э. Дейтел, М. Моргано; -- СПб.: Питер, 2013. - 560 с;
4. Калашников О.А. Ассемблер - это просто. Учимся программировать. - 2-е издание, переработанное и дополненное. - СПб.: БХВ-Петербург, 2011. - 336 с;
5. Страуструп Б. Дизайн и эволюция C++: Пер. с англ. - М.: ДМК Пресс. - 448 c;
6. Хорстманн, Кей С. Java SE 8. Вводный курс: Пер. с англ. 0 М.: ООО «И.Д. Вильямс», 2014 - 208 с;
7. Шилдт, Г. Java 8. Полное руководство; 9-е изд.: Пер. с англ. - М. : ООО "И.Д. Вильямс", 2015. - 1 376 с;
8. Сидорина Т. Л. Самоучитель Microsoft Visual Studio C++ и MFC. -- СПб.: БХВ-Петербург, 2009. -- 848 с;
9. Зиборов, В. В. MS Visual C++ 2010 в среде .NET. Библиотека программиста. -- СПб.: Питер, 2012. -- 320 с;
10. Wikipedia, the free encyclopedia [Электронный ресурс]: Свободная общедоступная многоязычная универсальная энциклопедия. - Режим доступа: http://en.wikipedia.org/wiki/Main_Page. - Загл. с экрана. - яз. англ.
Размещено на Allbest.ru
...Подобные документы
Обзор существующих популярных программ для просмотра погоды на ОС Android. Операционные системы современных смартфонов. Ключевые особенности Android, технология Java. Разработка программной части, выбор языка, описание алгоритма, ее логической структуры.
курсовая работа [911,5 K], добавлен 16.04.2014Разработка программного обеспечения для платформы Android версии 2.3: информационное приложения для поклонников футбольной команды, с возможностью просмотра событий, статистики и иной информации о команде и ее успехах. Листинг JsonDataManager.java.
дипломная работа [4,1 M], добавлен 24.04.2013Обзор рынка мобильных приложений, социальных сетей, аналогов. Обзор инструментов разработки: Android Studio, Microsoft visual С# 2012, PostgreeSQL, API Открытых данных Вологодской области, API Социальных сетей. Программный код, разработка интерфейса.
дипломная работа [2,6 M], добавлен 10.07.2017Архитектура операционной системы Android. Инструменты Android-разработчика. Установка Java Development Kit, Eclipse IDE, Android SDK. Настройка Android Development Tools. Разработка программы для работы с документами и для осуществления оперативной связи.
курсовая работа [2,0 M], добавлен 19.10.2014Разработка программы – сетевого эмулятора, позволяющего представить в графическом виде топологию маршрутизируемой сети. Сравнительный анализ существующих программных эмуляторов сетей и сетевого оборудования. Моделирование протоколов маршрутизации.
дипломная работа [512,2 K], добавлен 26.09.2014Преимущества операционной системы Android. Проектирование интерфейса приложений. Визуальные редакторы и средства кроссплатформенной разработки. Оптимизация игрового процесса, выбор фреймворка и библиотек. Классификация и характеристика игр по жанрам.
дипломная работа [2,6 M], добавлен 10.07.2017Структура Android-приложений. Особенности игрового движка. Алгоритмизация и программирование. Список игровых состояний. Настройка, отладка и тестирование программы. Разработка руководства пользователя. Тестирование инсталляции и отображения элементов.
дипломная работа [4,5 M], добавлен 19.01.2017Архитектура и история создания операционной системы Android. Язык программирования Java. Выбор средства для реализации Android приложения. Программная реализация Android приложения. Проведение тестирования разработанного программного обеспечения.
курсовая работа [167,8 K], добавлен 18.01.2017Требования к MS Office 2007. Набор средств разработки Visual Studio Tools for Office как альтернатива VBA. Разработка СУБД на базе MS Access. Разработка надстройки "Электронные компоненты" для PowerPoint на языке C# в среде MS Visual Studio 2010.
дипломная работа [5,2 M], добавлен 03.05.2013Изучение существующих подходов к использованию компьютерных игр в образовательном процессе. Разработка и реализация проекта игрового обучающего приложения на мобильной платформе. Выбор платформы и средств реализации игрового обучающего приложения.
дипломная работа [3,4 M], добавлен 12.08.2017Архитектура уровня команд платформы Java, формат файла класса Java. Компилятор ассемблероподобного языка, позволяющий создавать файлы классов, корректно обрабатываемые реальной JVM, поддерживающий все команды байт-кода Java и важнейшие возможности JVM.
курсовая работа [292,6 K], добавлен 17.09.2008Разработка клиент-серверного игрового приложения на примере игры в шашки для мобильных устройств на базе операционной системы Android. Обзор мобильных платформ. Экраны приложения и их взаимодействие. Графический интерфейс, руководство пользователя.
курсовая работа [2,6 M], добавлен 15.06.2013Разработка и освоение в современном производстве информационной подсистемы. Создание базы данных в среде MS SQL Server 2008 и приложения в среде MS Visual Studio 2012. Процесс ввода при выборе пунктов меню. Заполнение формы с критериями на фильтрацию.
отчет по практике [834,4 K], добавлен 27.11.2013Первое устройство, работающее под управлением Android. Приложения под операционную систему Android. Формат установочных пакетов. Разработка приложений на языке Java. Шаблоны основных пакетов и компонентов Android. Сборка приложений, основанная на Gradle.
курсовая работа [492,0 K], добавлен 08.02.2016Структура и архитектура платформы Android. Основные достоинства и недостатки операционной системы Android. Среда разработки Eclipse, платформа Java. Подготовка среды разработки. Вкладка "Погода", "Курс валют", "Новости". Просмотр полной новости.
дипломная работа [1,0 M], добавлен 11.07.2014История появления "флешек". Устройство и технические характеристики USB-флеш-памяти, принцип ее действия, дополнительные опции и программное обеспечение, типы разъемов. Карты памяти, их виды и форматы. Способы организации записи информации в ячейку.
реферат [439,2 K], добавлен 21.12.2010Проблемы, связанные с отсутствием информационной системы. Проектирование логической схемы данных для выбранной предметной области на основе методологии IDEF1X. Разработка информационной системы с использованием MS SQL Server 2008 и MS Visual Studio 2010.
курсовая работа [3,0 M], добавлен 07.08.2013Освоение функций работы со структурами данных и файлами. Разработка программного обеспечения для создания, обработки сведений о сотрудниках учреждения. Реализация алгоритма программы в среде Microsoft Visual Studio 2010. Изучение руководства пользователя.
курсовая работа [3,3 M], добавлен 28.08.2012Архитектура операционной системы Android, набор библиотек для обеспечения базового функционала приложений и виртуальная машина Dalvik. Объектно-ориентированный язык программирования Java как инструмент разработки мобильных приложений для ОС Android.
дипломная работа [1,6 M], добавлен 08.07.2015Разработка игрового проекта на игровом движке Unity 3D в среде программирования MS Visual Studio 2017. Блок-схема алгоритма работы приема сообщений с сервера на клиенте с упрощенным описанием выполняемых команд. Реализация пользовательского интерфейса.
курсовая работа [1,5 M], добавлен 10.07.2017