Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Эмулятор CHIP-8 - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать перегруженные функции. http://www.cyberforum.ru/cpp-beginners/thread158328.html
Написать перегруженные функции и протестировать их в основной программе: А) перевода минут, часов и секунд в секунды; Б) перевода секунд в часы минуты секунды.
C++ Не устанавливается VC++6 Professional Edition Подскажите пожалуйста, при установке VC++6 Professional Edition выдаёт сообщение: Не найден файл D:\Mein Programen\VISUAL~1\VISUAL~1.EDI\acmboot.exe или один из его компонентов. Проверьте... http://www.cyberforum.ru/cpp-beginners/thread158303.html
Функция, формирующая массив C++
Ребят тпомогите написать программу, подскажите с чего начать... Вот задание - Функция, формирующая новый массив, упорядоченный по неубыванию, из двух массивов-параметров, уже упорядоченных по...
C++ Условный оператор if
Добрый день! есть следующий код программы на C++: #include<cmath> #include<iostream> int main(){ l: double a; std::cout << "Enter an integer: \n" ; std::cin>> a; ...
C++ Надо написать функцию которая выдаёт маршрут файла http://www.cyberforum.ru/cpp-beginners/thread158250.html
Помогите пожалуйста!!! Надо написать функцию которая выдаёт маршрут файла!
C++ Переменные в циклах я понимаю как работает переменная i первом цикле, но во втором не пойму. Переменная i объявлена, но не проинициализирована. Какое значение во втором цикле? char * left(const char * str, int n)... подробнее

Показать сообщение отдельно
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
22.08.2010, 17:52
Цитата Сообщение от Alex Sabaka Посмотреть сообщение
Есть еще один вопрос: как понимать эти две инстр.
Зачем там регистр Y, если он не используется?
Регистр VY и правда не используется, наверное написан просто потому что семантика 8-го опкода такая.
Код
8XY6 VX = VX SHR 1 (VX=VX/2), VF = carry
Сдвиг регистра VX на 1 бит вправо (это тоже самое, что и деление на 2), регистр VF хранит флаг переноса.
Код
8XYE VX = VX SHL 1 (VX=VX*2), VF = carry
Сдвиг регистра VX на 1 бит влево (тоже самое, что и умножение на 2), регистр VF - флаг переноса.
Alex Sabaka, что же Вы вообще мучаетесь. Просто посмотрите наши исходники. Может и ошибки найдете
чем вам CHIPPER от Девида Винтера не угодил? Вполне годная тулза, с исходником.
Tronix, Это и правда неинтересно. Проект начался для изучения построения подобных вещей. Смысл же нам пользоваться чужими разработками? Если хочешь понять, как это работает - просто попробуй сделать этом сам

Евгений М., поправил оба опкода. Все цифры кстати отрисовываются, а не только "1".
D-опкод в итоге сделал таким. Все таки, как я понял часть спрайта может находиться с одной стороны экрана, а часть с другой. Если придется координата 63 - то вылет за границы массива. В общем вот - UFO больше не вылетает, а тарелка добравшись до края экрана появляется с другой стороны
Смотрим 13 ревизию.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void ExecuteOpcodeD(WORD opc)
{
    BYTE x = REG_VX(opc);
    BYTE y = REG_VY(opc);
 
    BYTE w = 8;
    BYTE h = opc & 0xF;
 
    for(int i = 0; i < h; ++i)
    {
        assert((iRegister + i) < DATA_MEM_SIZE);
        BYTE data = dataMemory[iRegister + i];
        for(int j = 0; j < w; ++j)
        {
            if((data & (0x80 >> j)) != 0)
            {
                int x0 = (j + x) % SCREEN_HOR_RES;
                int y0 = (i + y) % SCREEN_VER_RES;
                int offset = y0 + (x0 * SCREEN_VER_RES);
 
                assert(offset < VIDEO_MEM_SIZE);
 
                if(videoMemory[offset] == 1)
                    REG_VF = 1;
                else
                    REG_VF = 0;
 
                videoMemory[offset] ^= 1;
            }
        }
    }
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru