Що стосується NES (а також переважно SNES), то ось основний огляд. Я не писав жодних ігор NES, але писав емулятор NES (Graybox) і робив неабияку кількість інноваційних технологій старих візків.
Що стосується мови програмування: так, це все було складання. Програмування NES означало роботу безпосередньо з апаратними перериваннями, портами DMA, комутацією банків тощо. На щастя, програмування 6502 (а точніше, 2A03) досить просто [1]:
- Є кілька регістрів: в основному, A, X і Y, останні два використовуються лише для індексації та ітерації
- набір інструкцій невеликий і переважно прямий
- не багато пам’яті: основна оперативна пам’ять - 2 КБ, з додатковим розширенням на 8 КБ. З цього 2 КБ 256 байтів зарезервовано для стека, а на сторінці 0 (перші 256 байт) було місце, де ви хочете зберігати найбільш використовувані вказівники та значення через деякі спеціальні режими адресації
Ці 3 речі разом створюють обстановку, яку досить легко запам'ятати під час роботи з нею. Так, ви керуєте всією пам'яттю самостійно, але це означало по суті, що ви створюєте повну карту того, де все йде вперед, і ця карта не дуже велика, тому що ви повинні турбуватися лише про 2K, щоб ви могли побудувати це на шматочку графічний папір. Вам довелося спланувати речі трохи більше і статично призначити змінні та константи місцям RAM та ROM (на картриджі).
Він стає трохи хитрішим, як тільки ваші картриджі виходять за рамки адресних меж процесора. Це 64 Кб, з яких нижній 32 КБ встановлений в камені і відображається на всі види апаратних портів і оперативної пам’яті. Тут починається перемикання банків, що означає відображення частини ROM в (частину) вищого адресного простору 32 Кб.
Це може бути використано, хоча програміст хоче, але в якості прикладу може бути гра з 3 рівнями, з усіма даними рівня, метаданими та кодом для кожного рівня, набитими в окремі області пам'яті 8KB картриджа. Рівень може мати зворотні виклики, наприклад, ініціалізація, оновлення кадру тощо. "Завантаження" рівня означало б відображення цього 8 кБ фрагмента пам'яті, наприклад, 0xC000. Потім можна вказати, що програма init завжди знаходиться на рівні 0xC000, процедура оновлення кадру - на 0xC200, а дані рівня починаються з 0xC800. Основний код гри, розміщений в іншому фрагменті пам’яті, потім керує змінами рівня, просто поміняючи правильний фрагмент і переходячи до абсолютних адрес 0xC000 та 0xC200 у відповідний час.
Графічні дані Wrt: дані плиток NES - це 2-бітні карти 8x8 пікселів. Для фону вони поєднуються з 2-бітовим шаром роздільної здатності 1/4. Ці 4-бітні значення потім були індексовані в 16-палітровій палітрі, я вважаю, що наявних 53 ефективних унікальних кольорів. Спрайти також використовували дані 2-розрядних пікселів, і кожен спрайт вказував свій власний 2-розрядний груповий індекс, знову утворюючи 4-розрядний індекс pal. Зображення BG на екрані - це масив розмірами 32x30 з індексом плиток.
По суті, маючи тону повторень та індексів в індекси, ви можете зберегти дані дуже малі. Дані про рівень часто зберігаються у вигляді вертикальних смуг індексів плитки, і оскільки ті вертикальні смуги також були повторно використані, вони також були індексовані і зберігалися лише один раз на картриджі. Прості методи стиснення даних працюють аналогічно. Це дозволило Маріо 1 отримати 32 КБ даних (з простором місця) та 8 КБ растрових даних.
Що стосується середовищ розробників, я бачив кілька фотографій, на яких люди працювали на сертифікованих старовинних комп’ютерах, підключених до пальників EEPROM для роботи. Налагодження за допомогою інструментів насправді не було можливим до настання віку SNES [2]. Це головна причина того, що багато старих ігор мають "очевидні" помилки в них і чому такі речі, як Gameshark, можуть робити те, що вони роблять; Здоров'я гравця завжди буде в пам'яті X, тому ви можете примусити його бути 100 завжди.
Якщо ви вважаєте, що ці речі цікаві, я рекомендую вам подивитися, наприклад, http://wiki.nesdev.com/w/index.php/Nesdev_Wiki
Існує досить багато курсів програмування для NES, які також можна знайти в Інтернеті.
Сподіваюся, цей спрощений огляд дав деяке розуміння розвитку ігор 80-х років.
[1] Відносно кажучи. Також я упереджений, як я написав сам Graybox приблизно в 85% PowerPC збірці. [2] Дивіться створення статті FF6: http://www.edge-online.com/features/the-making-of-final-fantasy-vi/