Процессор виртуальной машины CHIP-8 содержит 16 8-битных регистров , имеющих имена от V0 до VF. Регистры V0-9,VA-VE являются регистрами общего назначения (РОН). Регистр VF используется в качестве регистра флагов.
CHIP-8 содержит так же два специальных 16-битных регистра: PC и I. Первый является указателем команд и программно недоступен, второй - индексный и доступен для изменения.
Всего имеется 35 различных команд. Все инструкции имеют фиксированный размер 16 бит (2 байта). Ниже опишем все инструкции виртуальной машины CHIP-8.
| Код операции | Ассемблерная мнемоника | Описание |
| 00CX | scdown x | Переместить экран на х линий вниз. Только в модели Super. Не реализовано |
| 00E0 | cls | Очистить экран |
| 00EE | rts | Возврат из процедуры |
| 00FB | scright | Скроллировать экран на 4 пиксела вправо. Только в модели Super. Не реализовано |
| 00FC | scleft | Скроллировать экран на 4 пиксела влево. Только в модели Super. Не реализовано |
| 00FE | low | Выключить расширенный режим отображения. Только в модели Super. |
| 00FF | high | Включить расширенный графический режим (128х64х1bpp). Только в модели Super. |
| 1NNN | jmp NNN | Безусловный переход по адресу NNN |
| 2NNN | jsr NNN | Вызов процедуры по адресу NNN |
| 3XNN | skeq VX,NN | Пропустить следующую инструкцию если содержимое регистра X равно константе NN |
| 4XNN | skne VX,NN | Пропустить следующую инструкцию, если значение в ргистре VX не равно константе NN |
| 5XY0 | skeq VX,VY | Проппустить следующую инструкцию, если значения в регистрах VX и VY равны |
| 6XNN | mov VX,NN | Поместить константу NN в регистр VX |
| 7XNN | add VX,NN | Сложить константу NN со значением в регистре VX и поместить результат в VX. Флаг переноса НЕ выставляется |
| 8XY0 | mov VX,VY | Скопировать значение из регистра VY в регистр VX |
| 8XY1 | or VX,VY | Выполнить побитовое ИЛИ (or) регистров VX и VY и поместить результат в VX |
| 8XY2 | and VX,VY | Выполнить побитовое И (and) регистров VX и VY и поместить результат в VX |
| 8XY3 | xor VX,VY | Выполнить побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ (xor) регистров VX и VY и поместить результат в VX |
| 8XY4 | add VX,VY | Сложить содержимое регистров VX и VY, результат помстить в VX. При переполнении VF устанавливается в 1 |
| 8XY5 | sub VX,VY | Вычесть знечение в регистре VY из значения в регистре VX, поместить результат в VX. VF = 1 если был заем. |
| 8XY6 | shr VX | Побитовый сдвиг регистра VX на 1 бит вправо. Значение младшего (нулевого) вытолкнутого бита помещается в VF. Регистр VY игнорируется (лучше поместить туда 0). |
| 8XY7 | rsb VX,VY | Вычитание VX = VY - VX VF = 1 при возникновени заема. |
| 8XYE | shl VX | Битовый сдвиг регистра VX на 1 бит влево с переносом. Значение вытолкнутого бита помещается в регистр VF. |
| 9XY0 | skne VX,VY | Пропустить следующую инсрукцию если значения регистров VX и VY не равны. |
| ANNN | mvi NNN | Поместить в индексный регистр константу NNN |
| BNNN | jmi NNN | Безусловный переход по адресу NNN+[V0] |
| CXNN | rand VX,NN | Поместить в VX очередное значение генератора псевдослучайных чисел, не превосходящее NN |
| DXYS | sprite VX,VY,s | Draw sprite at screen location rx,ry height s Sprites stored in memory at location in index register, maximum 8 bits wide. Wraps around the screen. If when drawn, clears a pixel, vf is set to 1 otherwise it is zero. All drawing is xor drawing (e.g. it toggles the screen pixels |
| DXY0 | xsprite VX,VY | Draws extended sprite at screen location rx,ry As above,but sprite is always 16 x 16. Superchip only, not yet implemented |
| EK9E | skpr K | skip if key (register rk) pressed The key is a key number, see the chip-8 documentation |
| EKA1 | skup K | skip if key (register rk) not pressed |
| FX07 | gdelay VX | Скопировать регистр delay timerв VX |
| FX0A | key VX | wait for for keypress,put key in register vr |
| FX15 | sdelay VX | Скопировать значение VX в регистр delay timer |
| FX18 | ssound VX | Скопировать значение VX в регистр sound timer |
| FX1E | adi VX | Сложить содержимое регистра VX и индексного регистра. Результата поместить в индексный регистр |
| FX29 | font VX | point I to the sprite for hexadecimal character in vr Sprite is 5 bytes high |
| FX30 | xfont VX | point I to the sprite for hexadecimal character in vr Sprite is 10 bytes high,Super only |
| FX33 | bcd VX | Записать двоично-десятичное представление регистра VX по адресам I,I+1,I+2 Значение индексного регистра I не изменяется. |
| FX55 | str V0_VX | Сохранить в памяти, начинающейся с адреса [I], содержимое регистров V0-VX Индексный регистр устанавливается на позицию за последним сохраненным элементом, т.е. I = I + X + 1 |
| FX65 | ldr V0-VX | Загрузить из памяти, начинающейся с адреса [I], содержимое регистров V0-VX. Индексный регистр устанавливается на позицию за последним сохраненным элементом, т.е. I = I + X + 1 |
Ссылки:
Комментариев нет:
Отправить комментарий