В астрале
![]() 8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Эмулятор CHIP-810.08.2010, 06:34. Показов 14145. Ответов 90
Метки нет Все метки)
(
Мы с fasked написали простенький эмулятор для платформы CHIP-8.
CHIP-8 Остались вопросы по графике и клавиатуре. Если кто знает как реализовать - помогите, пожалуйста. Так же приглашаем для участия в доработке этого проекта, а так же следующих проектах всех, кто желает учиться и трудиться. Кому интересна работа эмулятора все вопросы к fasked) Полный проект в прикрепленном архиве в сообщении ниже CHIP8
types.h
chip-8.h
chip8.cpp
main.cpp
0
|
|
10.08.2010, 06:34 | |
Ответы с готовыми решениями:
90
Эмулятор. На С, С++ Эмулятор телефона. С++ Эмулятор мышки
|
![]() |
|
10.08.2010, 06:43 | 2 |
За ночь мы немного переутомились, поэтому ZIP с исходниками приклеить с первой попытки не получилось.
Вот добавляю обещанный архивчик. В принципе в этом архиве тот же самый код, что и в сообщении выше, за пожалуй совсем небольшими исключеняими вроде комментариев - все таки мы на большом расстоянии друг от друга находимся и полную синхронизацию оказалось обеспечить не так просто ![]()
0
|
1080 / 1006 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
10.08.2010, 07:00 | 3 |
Эээээ... Скомпилировал. Запустил. А что должно появится?
0
|
![]() |
|
10.08.2010, 07:07 | 4 |
Пока еще ничего, так как графическая не реализована. Соответственно ничего увидеть и нельзя.
К тому же опкоды сейчас (тот самый массив, что в main.cpp) подобраны ручным образом для проверки логики. В будущем эти опкоды должны содержать программу в бинарном виде. Мы приносим свои извинения за недоработки, но собственно по этой причине и обратились с вопросами по поводу графической части и части, обеспечивающей взаимодействие с клавиатурой. Конкретно интересует следующее: - С помощью каких библиотек можно реализовать данные задачи. - Какие библиотеки удобнее или даже проще для понимания (мы же только учимся). Может быть кто-то уже имеет опыт работы с графикой и клавиатурой. Просим всех оказать посильное содействие и всяческую помощь ![]() Не по теме: мой тысячный пост ^_^
0
|
1080 / 1006 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
10.08.2010, 08:00 | 5 |
![]() Решение
Ладно. Попробую.
На консоле будет сложно всю графику рисовать. Для этого Вам нужно переключится на графический режим и т.д.. Как это делать я не знаю. Поэтому будем создавать с помощью окон используя интерфейс WinAPI. На эту тему читаем это. Если лень читать объясню по-своему. В моем шаблоне по созданию оконных приложений (см. вложения) я создал функции OnCreate, OnKeyDown, OnPaint. OnCreate вызывает когда окно только-что была создана. OnKeyDown вызывает когда нажали на клавишу в клавиатуре. OnPaint вызывает когда окно рисуется. Эта функция будет все время вызываться пока окно не закроется. Эту функцию применяют, чтобы рисовать что-нибудь свое (например эллипс). Если Вы будете рисовать все "точки из монитора" CHIP8 с помощью пикселей, тогда Ваша основаная функция будет SetPixel. Если Вы будете рисовать все "точки из монитора" CHIP8 с помощью квадратиков, тогда Ваши основаные функции будут CreateRectRgn, CreateSolidBrush, FillRgn. Про эти функции читаем в MSDN-e. Для компиляции шаблона в командной строке с помощью GCC наберите Теперь один из важных вопросов, который я должен был спросить до того как все это начал писать. Вы на какой платформе (ОС) эмулятор будете писать?
3
|
В астрале
![]() 8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
10.08.2010, 13:35 [ТС] | 6 |
Евгений М., Под винду заточено. Хотя можно сделать и кроссплатформенным с помощью Qt
0
|
Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
|
|
10.08.2010, 13:46 | 7 |
Lavroff, а ты знаешь Qt?
0
|
В астрале
![]() 8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
10.08.2010, 13:54 [ТС] | 8 |
nikkka, Не сильно) Но разобраться можно.
0
|
![]() |
|
10.08.2010, 19:24 | 9 |
Евгений М., Спасибо. Однако Ваш архив почему-то упорно отказывается у меня распаковываться.
Поправил работу с видеопамятью. Ниже прилагаю демонстрационную версию под Windows (на Winapi) в виде приложения. На экран последовательно выводится несколько цифр.
0
|
1080 / 1006 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
10.08.2010, 20:45 | 10 |
Это уже небольшой прогресс. Только вот хотелось бы кое-что узнать.
В CHIP8 как экран рисуется? Отдельным потоком проверяется видеопамять или после вызова опкода в определенной части экрана моментально ставится точка? Вижу проект довольно серьезный, а не для "просто поучится". Каким он будет? Open Source или просто Freeware?
0
|
![]() |
|
10.08.2010, 21:47 | 11 |
Вообще не думали по этому поводу, скорее всего открытый код. Мы решили заняться этим ради повышения собственного навыка. А платформу CHIP-8 взяли именно из-за простоты, чтобы посмотреть и ощутить на собственном опыте, как вообще это делается.
Видео-память представлена отдельным байтовым массивом. Запись в видеопамять производится по нахождению определенной комбинацией опкодов, в которых передаются координаты и размер спрайта. Сама же отрисовка экрана производится в отдельном потоке, пока что мы выделили для этого специальную функцию, которая вызывается каждый цикл чтения опкода. То есть на данный момент экран обновляется один раз за каждый такт работы эмулятора. Конечно так часто отрисовывать экран совершенно не обязательно. Этот момент в будущем легко исправить. В общем, да - отдельным потоком. В принципе я ничего не менял, но для наглядности ощутимо ![]()
0
|
В астрале
![]() 8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
11.08.2010, 06:51 [ТС] | 12 |
Начали делать интерфейс в Qt - вошли в ступор. Проблема с объединением реализации логики и интерфейса программы. Непонятно как отрисовывать спрайты на виджете и собственно откуда вызывать функцию инициализации памяти и запуска эмулятора. Переменные принимают немыслимые значения, с клавиатурой тоже ничерта не ясно. И вообще ад. Как это возможно реализовать, всмысле совместить графику Qt-шную с написанным кроме графики и клавы эмулятором?
0
|
1080 / 1006 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
11.08.2010, 07:49 | 13 |
Прямо в main().
Насчет вывода (монитора). В этом же main() создай новый поток (читайте про класс QThread), который будет отвечать за монитор (а может бы и за нажатые клавиши). Эй, хорош. Никто не говорил в жизни будет все идеально. Не по теме: Че-то мне кажется Вы либо плохо либо вообще спали, судя по сегодняшней проблемы со столицей. Если у Вас дома нет кондиционера, попробуйте найти родственников у кого есть. Все-таки спать тоже нужно. Иначе бредить будете (проверено).
2
|
В астрале
![]() 8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
11.08.2010, 07:51 [ТС] | 14 |
Евгений М., Совмещать проект и графику как Qt проект, или мутить какую-то вставку в IDE? Или это вообще не важно?
Просто сейчас мы с fasked-ом пытались вызывать главную функцию (инциализацию и запуск) по нажатию кнопки Run в меню. Происходили определенные проблемы. Например считывание бинарного файла, который когда проект был только С/C++ абсолютно нормально читался. Сейчас ftell выдает значение около 1000, ранее выдавал около 50. Файл не менялся. Почему такое может происходить? Пробовали и через счетчик. До конца файла. В конце цикла - i было равно 500+. Хотя такого впринципе не может быть, ибо файл размера меньшего. Чтение через fread соответственно. Не по теме: А про ад это так. Для красоты
0
|
1080 / 1006 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
11.08.2010, 08:01 | 15 |
Ну... Вообще можно обойтись с IDE на котором Вы пишите все время (т.е. не только проги на Qt). Т.е. прям в main.cpp вставить #include <QApplication> и т.д.. Компилировать через командную строку. На мой взгляд это намного удобнее.
1
|
В астрале
![]() 8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
11.08.2010, 08:04 [ТС] | 16 |
Евгений М., Библиотеки у Qt открытые?
Хм. Про значения переменных был не прав. Как было так и осталось. Извиняюсь
0
|
1080 / 1006 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
11.08.2010, 08:07 | 17 |
Если Вы имеете ввиду есть ли исходники то вроде да.
0
|
В астрале
![]() 8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
11.08.2010, 08:09 [ТС] | 18 |
Евгений М., Через сам Qt как я понимаю тоже можно сделать? Там тоже вызывать в самом main или все таки по выбору соотвествующей опции в менюшке, что по идее более логично?
0
|
1080 / 1006 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
11.08.2010, 08:16 | 19 |
Не понял вопрос.
Тоже не понял. Если Вы имеете ввиду взять исходники Qt и добавить туда свой код эмулятора, то это не логично, т.к. Qt - это библиотека и должна присоединятся с нашему проекту через #include. PS: На Qt я не профи. SDK и книгу скачал вчера, сегодня с утра начал все компилировать.
1
|
В астрале
![]() 8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
11.08.2010, 08:18 [ТС] | 20 |
Евгений М., Спасибо. Вечером будем смотреть.
0
|
11.08.2010, 08:18 | |
Помогаю со студенческими работами здесь
20
Эмулятор клавиатуры Эмулятор трёхадресной машины. Эмулятор Вебки под Seven Реализовать эмулятор командной строки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |