Форум программистов, компьютерный форум 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)... подробнее

Показать сообщение отдельно
Tronix
157 / 104 / 5
Регистрация: 22.08.2010
Сообщений: 215
22.08.2010, 21:26
Цитата Сообщение от Евгений М. Посмотреть сообщение
Tronix, возник еще один вопрос.

Почему нельзя загружать нули из памяти в регистры?
Тут имеется в виду не "нельзя", а "не может". То есть что происходит: в моем тесте по определенному смещению есть массив из 16 нулей.
Assembler
1
2
3
4
5
6
7
8
9
NullReg:
    dw #0000
    dw #0000
    dw #0000
    dw #0000
    dw #0000
    dw #0000
    dw #0000
    dw #0000
Сперва я заполняю все регистры вручную цифрами от 0 до 0xF :
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    ld v0,0     ; fill all registers by hands
    ld v1,1     ; but we don't know, how work FX65 instruction
    ld v2,2
    ld v3,3
    ld v4,4
    ld v5,5
    ld v6,6
    ld v7,7
    ld v8,8
    ld v9,9
    ld va,#a
    ld vb,#b
    ld vc,#c
    ld vd,#d
    ld ve,#e
    ld vf,#f
Затем я устанавливаю регистр I на смещение, содержащее массив из нулей:
Assembler
1
    ld I, nullreg   ; fill all reg with null
И после этого выполняю команду FF65, которая должна во все регистры (от V0 до VF) загрузить содержимое из памяти по смещению в регистре I, то есть должны все регистры заполнится нулями:
Assembler
1
    ld vf, [I]
Далее я сравниваю каждый регистр с 0 (нулем). Если какой-то из регистров не обнулился, то уходим на ошибку (печатаем ERROR 0)
Assembler
1
2
3
4
5
6
7
8
9
10
11
    se vf,0     
    jp error1
    se ve,0     
    jp error1
    se vd,0 
    jp error1
           ; skip some code
    se v1,0
    jp error1
    se v0,0
    jp error1
Таким образом что-то в вашем эмуле не так с Fx65 инструкцией. Я конечно в сях не силен ни разу, но вот помоему тут у вас бага:

C++
1
2
3
4
5
6
7
8
    else if((opc & 0xFF) == 0x65)
    {
        for(int i = 0; i < ((opc & 0xF00) >> 8); ++i)
        {
            assert((iRegister + i) < DATA_MEM_SIZE);
            dataRegisters[i] = dataMemory[iRegister + i];
        }
    }
А конкретнее в условии цикла. Мне кажется надо писать так: i <= ((opc & 0xF00) >> 8) , (меньше или равно) а то последний регистр (VF) не обнуляется у вас. Ну и так же исправить условие цикла в обработке Fx55 команды.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru