Тема: SUPER-CHIP v1.1
SUPER-CHIP v1.1
===============
... змінена версія ігрового інтерпретатора CHIP-8, початково створеного Андреасом Ґюстсафссоном.
S-CHIP надає:
- повноекранне відображення в новому розширеному відеорежимі
- зворотню сумісність (ви можете запускати старі ігри для CHIP-8)
- збільшення швидкодії в розширеному режимі
- наявність більших 16x16 спрайтів
- більші шрифти для балів
- взаємодію з S-CHIP програмами, надсилаючи та одержуючи інформацію
- можливість припинити роботу інтерпретатора програмно
- не потрібно вимикати годинника
- команди процесора для листання екрану вниз, вліво і вправо
Ознайомлення з CHIP
-------------------
Нагадаю, що мова програмування CHIP-8 використовувавлася на багатьох домашніх комп'ютерах, основою яких був RCA'шний CDP1802 процесор в кінці 1970'х. Ця маленька інтерпретована мова була створена для написання простих відеоігор. Вона має менш ніж 40 машинних команд, включно з арифметикою, графікою, звуком і передачею керування. Всі команди мають довжину 16 бітів та виконувалися дуже маленьким інтерпретатором віртуальної машини (імплементація для 1802 має довжину 512 байтів).
Технічний опис
--------------
Віртуальна машина CHIP-8 адресує байти та має адресний простір 4 кб для шістнадцяткових адрес 000-FFF. Проте, адреси 000-1FF зарезервовані для місця розташування інтерпретатора CHIP-8, тому програми CHIP-8 починаються з адреси 200. Всі машинні команди довжиною 16 біт та завжди починаються з парної адреси.
Машина має 16 8-бітних регістрів загального призначення, які називаються V0..VF.
Регістр VF змінюється багатьма командами, бо слугує парпорцем переносу та показником перетину спрайтів. Також наявний 16-бітний вказівний регістр I (хоча лише 12 молодших бітів зазвичай використовуються).
CHIP-8 програми відображають графіку малюванням спрайтів, які мають 8 пікселів ширини і 1..15 пікселів висоти. Роздільна здатність екрану складає 32 на 64 пікселів в звичайному режимі. Координати екрану починаються з лівого верхнього кута екрану і всі вони додатні. Спрайти зберігаються в тупокінцевому вигляді (англ. big endian), тобто найбільш значимий біт відповідає найлівішому пікселу. Все малювання відбувається XOR режимі. Якщо хоча б один піксель при цьому гаситься, то VF <> 00, інакше - 00.
В розширеному відеорежимі роздільна здатність екрану складає 64 на 128 пікселів. Також в ньому наявний розмір спрайтів 16x16.
Два таймери: затримковий таймер і звуковий таймер. Обидва таймери зменшують значення 60 ріазів на секунду, доки значення таймерів не дорівнюватиме нулеві, але
звуковий таймер при цьому гуде.
В нижче наведеній таблиці команд, NNN означає 12-бітові адреси, KK - 8-бітові сталі, X і Y - 4-бітові номери регістрів. Шістнадцяткові цифри означають себе. Перші два символи коду команди утворюють байт команди з меншою адресою, де перша літера є найбільш значимим ніблом.
Командти, позначені(*) є новими в SUPER-CHIP.
00CN* Листання екрану на N пікселів вниз
00E0 Очищення екрану
00EE Повернення з процедури
00FB* Листання екрану на 4 пікселів вправо
00FC* Листання екрану на 4 пікселів вліво
00FD* Припинення роботи
00FE* Вимкнення розширеного відеорежиму
00FF* Увімкнення розширеного відеорежиму для повноекранної графіки
1NNN Перехід до NNN
2NNN Виклик процедури NNN
3XKK Пропуск наступної інструкції, якщо VX == KK
4XKK Пропуск наступної інструкції, якщо VX <> KK
5XY0 Пропуск наступної інструкції, якщо VX == VY
6XKK VX := KK
7XKK VX := VX + KK
8XY0 VX := VY, VF може змінитися
8XY1 VX := VX or VY, VF може змінитися
8XY2 VX := VX and VY, VF може змінитися
8XY3 VX := VX xor VY, VF може змінитися
8XY4 VX := VX + VY, VF := переніс
8XY5 VX := VX - VY, VF := нема позики
8XY6 VX := VX shr 1, VF := переніс
8XY7 VX := VY - VX, VF := нема позики
8XYE VX := VX shl 1, VF := переніс
9XY0 Пропуск наступної інструкції, якщо VX <> VY
ANNN I := NNN
BNNN Перехід за адресою NNN+V0
CXKK VX := псевдовипадкове_число and KK
DXYN* Показ N-байтового спрайта з M(I) за координатами (VX,VY), VF := перетин. Якщо N=0 і чинний розширений режим, показує спрайти 16x16.
EX9E Пропуск наступної інструкції, якщо клавша з кодом VX натиснена
EXA1 Пропуск наступної інструкції, якщо клавша з кодом VX не натиснена
FX07 VX := затримковий_таймер
FX0A Очікування натиснення клавіші, зберігання значення натисненої клавіші в VX
FX15 затримковий_таймер := VX
FX18 звуковий_таймер := VX
FX1E I := I + VX
FX29 Посилання в I на 5-байтовий шрифтовий спрайт для шістнадцяткового значення VX
FX30* Посилання в I на 10-байтовий шрифтовий спрайт для цифри в VX (0..9)
FX33 Збереження двійково-десяткове відображення VX в M(I)..M(I+2)
FX55 Збереження V0..VX в пам'яті, починаючи з M(I)
FX65 Зчитування V0..VX з пам'яті, починаючи з M(I)
FX75* Збереження V0..VX в RPL користувацькі прапорці (X <= 7)
FX85* Зчитування V0..VX з RPL користувацьких прапорців (X <= 7)
Нотатки про HP48SX iмплементацію
--------------------------------
CHIP-8 програми зберігаються в HP48SX як стрічкові об'єкти, що містять програмні байти в зростальному порядку адрес, які починаються з 0200. Сам інтерпретатор є об'єктом машинного коду, який здатний виконувати CHIP-8 прогамні стрічки на рівні 1. Потрібно 4 kB вільної пам'яті. Якщо відбувається помилка під час виконання, адреса поточної CHIP-8 команди повертається як двікове ціле на рівень 1.
Натискання клавіші пробіла призводить до припинення роботи, ENTER - до перезавантаження CHIP-8 программ, а клавіш +/- - до вмикання/вимикання звуку.
Вкладеність процедур обмежена 16 рівнями.
Більшість chip-8 програм писані для 16-клавішних шістнадцяткових клавіатур з наступною розкладкою:
1 2 3 C 7 8 9 /
4 5 6 D Ця клавіатура емулюється HP48SX 4 5 6 *
7 8 9 E наступними клавішами: 1 2 3 -
A 0 B F 0 . _ +
Це може призвести до деякого непорозуміння з програмами, які потребують числового вводу.
Copyrights, etc
---------------
Частини цього документу зкопійовані з початкового CHIP-48 документу, писаного Андреасом Ґюстафссоном.
Зміни від CHIP v2.25 до S-CHIP v1.1 зроблені Еріком Бринтсем (erikmb@etek.chalmers.se)