Автоматты аударма пайдаланылды

CHIP-8 эмуляторын жазамыз

Жақында мен досымнан Қазына таптым - Game Boy Advance. Бірақ содан кейін мен оның Pokemon ойындарын компьютерімде көрдім, өйткені оның картридждері жоқ. Осы сәттен бастап мен эмуляторды жасау қаншалықты қиын деп ойладым.

CHIP-8-бағдарламалау тілі және ода тек 35 Нұсқаулық бар, оларды операциялық кодтар деп те атайды. Берілген тілге еліктеу үшін біз барлық 35 нұсқаулықты орындай алатын CHIP-8 аудармашысын жасауымыз керек. Мүмкіндіктер тізімін веб-сайттан көре аласыз https://johnearnest.github.io/Octo/docs/chip8ref.pdf

CHIP-8 жүйесінде әрқайсысы 8 бит (1 байт) алатын 16 регистр бар. Бағдарлама есептегіші, 16 биттік индекс регистрі, жұмыс кодын толтырғыш және стек көрсеткіші, әрқайсысының өлшемі 16 бит. Жад бұл 4 Килобайт мұнда алғашқы 512 байтты аудармашы алады, ал CHIP-8 - де жазылған барлық бағдарламалар 512 орыннан басталады. Бағдарлама есептегіш регистрінен қайтару орындарын сақтау үшін пайдаланылатын кем дегенде 16 деңгейлі стек көрсеткіші қажет.

CHIP-8 - де екі таймер бар олар 60-тан 0-ге дейін есептеледі. Кешіктіру таймері бағдарламадағы оқиғалар үшін пайдаланылады және оның мәнін көрсетуге және оқуға болады. Дыбыс таймері нөлге жеткенде дыбыс шығарады. Әр операциядан кейін екі таймер де 1-ге азаяды.

CHIP-8-де 16 батырма бар (0x0-0xF) олар әдетте пернетақтаға осылай аударылады:

1 2 3 C        1 2 3 4
4 5 6 D   --\  Q W E R
7 8 9 E   --/  A S D F
A 0 B F        Z X C V

Әдетте, бағыттар үшін 2, 4, 6 және 8 түймелері қолданылады.

Сіз менің толық емес имплементациямды Python тілінде GitHub сілтемесінен ROM файлдарымен бірге таба аласыз. Мен жылдамырақ бағдарламалау тілдерін Rust немесе C/C++ ретінде пайдалануды ұсынамын, себебі құрастырылған бинарлық файлдар жоғары оңтайландырылған, нәтижесінде өнімділік жақсарады, бұл нақты уақыттағы эмуляция үшін өте маңызды.

Пікірлер 1

Кіру пікір қалдыру үшін

Обалдеть! Это круто!

Жауап беру