Флейм
GameDev.ru / Флейм / Форум / Блеск и нищета 8/16-битных консолей и ПК (15 стр)

Блеск и нищета 8/16-битных консолей и ПК (15 стр)

Страницы: 114 15 16 1731 Следующая »
=A=L=X=Постоялецwww14 фев. 20185:40#210
История архитектуры популярных микропроцессоров — семейство Motorola/MOS/WDC

Изображение

Motorola 6800

В начале 70–ых полупроводниковое подразделение Motorola (уступающее по объёму сбыта только Texas Instruments) решает разработать собственный микропроцессор и в 1974 (уже после появления описанного в предыдущей статье Intel 8080) на рынок выходит Motorola 6800.

Транзисторов: ~4100
Инструкций: 72
Частота: 1–2 МГц

Процессор адресует линейное пространство ОЗУ в 64 Кб (16 бит адреса). Специализированные порты ввода–вывода отсутствуют, поэтому они как правило "маппятся" в ОЗУ и выглядят для процессора как её ячейки.

Регистры:
— Два аккумулятора A и B (8 бит каждый)
— Регистр флагов Conditional Codes (CC): C (перенос), V (переполнение), Z (ноль), N (знак), I (прерывание), H (половинный заём)
— Индексный регистр IX (16 бит)
— Регистр вершины стека SP (16 бит)
— Счетчик инструкций PC (16 бит)

Если отбросить те регистры, которые должны быть у (практически) любого процессора — счетчик инструкций, вершина стека и флаги (PC, SP, CC), то выйдет, что регистров общего назначения у этого процессора всего три — A, B и IX. Скудное количество регистров — первая характерная особенность всего семейства Motorola/MOS, которая вынуждает подавляющее большинство арифметико–логических операций с аккумулятором брать второй операнд из ОЗУ и сохранять результат в аккумулятор. Даже в калькуляторном 4004 было шестнадцать 4–битных (или восемь 8–битных) регистра общего назначения (помимо аккумулятора). В 6800 аккумуляторов два и почти любая арифметико–логическая инструкция может быть выполнена с тем или другим, но второй операнд почти всегда берется из ОЗУ.
В связи с этим в процессоре сильное внимание уделено тому где и как может располагаться второй операнд в памяти. Есть следующие режимы адресации данных:
— Непосредственное данное в инструкции (immediate).
— Данное в памяти по 16–битному адресу хранимому в инструкции (extended).
— Данное в памяти по 8–битному адресу хранимому в инструкции (direct) — этот сокращённый и (потому) быстрый способ адресации первых 256 байт памяти является второй крайне типичной для этого семейства процессоров особенностью. Первые 256 байт памяти в них часто называют "нулевой страницей (zero–page)" и в них часто располагаются важные для программ данные.
— Байт (без знака) в инструкции складывается с регистром IX и берется данное из этого адреса (index).

Инструкции процессора можно разбить на несколько категорий в зависимости от возможных способов адресации:
1. Команды с двумя операндами первый из которых — аккумулятор, а второй — ячейка памяти с одной из 4–х адресаций: сохранение/загрузка (в/из памяти), сложение/вычитание (с переносом и без), сравнение, логические AND/OR/XOR, логический тест (по AND).
2. Команды с одним операндом — ячейкой памяти с одной из 4–х адресаций: сравнение с IX (16–битное), загрузка SP или IX, сохранение SP или IX (кроме адресации immediate).
3. Команды с одним операндом — или аккумулятором или ячейкой в памяти с адресацией direct или extended: инкремент/декремент, битовые сдвиги (и арифметические и логические), битовые прокрутки, обнуление, дополнение до двух, смена знака, сравнение с нулём.
4. Переходы: Условные переходы всегда относительные по байтовому смещению, безусловный переход и вызов процедуры могут быть еще по абсолютному 16–битному адресу или косвенно по адресу IX+байтовое смещение.
6. Команды с вмененным операндом. Явных операций со стеком только две — PUSH/POP одного из аккумуляторов. Доступны так же: инкремент/декремент SP/IX, очистка/установка флагов C/V/I, передача A в B или регистр флагов и обратно, передача SP в IX и обратно, сложение/вычитание B из A и их сравнение, десятичная коррекция A, возврат из прерываний или процедур и программная генерация прерываний.

Несмотря на то, что наборы и команд и режимов адресаций были немаленькими, но наличие только одного 16–битного регистра через который можно косвенно считывать память несколько подрывает удобство программирования на 6800. Так, например, процедура копирования произвольного региона памяти занимает около 18 команд и 32 байт памяти даже при условии расположения временных переменных в zero–page (и потому компактной адресации direct) — в то время как на Intel 8080 достаточно было 11 команд и вдвое меньше памяти — 14 байт. Особой популярности в нише компьютеров процессор не получил — больше выстрелило его применение в качестве микроконтроллера — под что были выпущены специальные его ревизии.

MOS Technology 6502

В 1974 году восемь инженеров Motorola, работавших над 6800 перешли в компанию MOS Technology, основанную в 1969–ом году тремя выходцами из General Instruments. И шли эти инженеры со вполне конкретной целью — сделать дешевого и популярного "убийцу 6800", да и остальных распространённых 8–битных микропроцессоров на рынке.
Планировалось выпустить две версии микросхемы с одинаковой архитектурой (не совместимой, однако, с 6800) под номерами 6501 и 6502. 6501 по замыслу должен был полностью по разьёмам, вольтажу и предназначению контактов быть совместимым с 6800, потому купив его можно было бы выпаять из имеющегося ПК Motorola 6800, впаять на его место MOS 6501 и заменив код программ пользоваться компьютером как новым. 6502 же обладал иным форм–фактором, включал в себя для удобства генератор частоты (так что не нужно было подключать внешний как в 6800) и потому предназначался для новых систем разрабатываемых с нуля. Однако, узнав из анонсов о планах на MOS 6501, Motorola разволновалась и побежала в суд, отчего программа по его разработке была свёрнута. Так или иначе у MOS Technology был козырь — технология "исправления масок" резко снижающая процент брака при выпуске микросхем. Поэтому когда в 1975 на рынок, где цены на аналоги начинались от $179, выходит MOS 6502 по цене $25 — он этот рынок взрывает.

Транзисторов: ~3500
Инструкций: 56
Частота: 1–3 МГц

Архитектура MOS 6502 с одной стороны отличается с Motorola 6800 до полной несовместимости, но с другой стороны полностью копирует самые характерные её черты. Можно воспринимать её как не совсем однозначную "работу над ошибками". Акцент в немногочисленных регистрах сместился с аккумуляторов на индексы: аккумулятор остался один (A), зато индексных регистров стало два — X и Y. При этом, однако, состоялось одно спорное упрощение: и индесные регистры и регистр стека из 16–битных стали 8–битными. В результате стек стал обязательно располагаться сразу за zero–page в следующих за ней 256 байтах памяти и вмещал не более 256 байт. Можно сказать, что процессор стал 8–битным настолько насколько это вообще возможно — единственным 16–битным регистром остался счётчик инструкций.

Регистры:
— Аккумулятор A (8 бит)
— Регистр флагов Processor Flags (P): C (перенос), Z (ноль), I (прерывание), D (десятичное число), B (прерывание отладки), V (переполнение), N (знак)
— Индексные регистры X и Y (8 бит)
— Регистр вершины стека SP (8 бит)
— Счетчик инструкций PC (16 бит)

"Усыхание" индексных регистров до 8 бит в MOS решили нивелировать существенно расширенными режимами индексации данных в памяти:
— Непосредственное данное в инструкции (immediate или imm).
— Данное в памяти по 16–битному адресу хранимому в инструкции (absolute или abs)
— То же что absolute, но адрес увеличивается на X или Y (absolute indexed или abs idx)
— Данное в памяти по 8–битному адресу хранимому в инструкции (zero–page или zpg)
— То же что zero–page, но адрес увеличивается на X или Y (zero–page indexed или zpg idx). Примечение: адрес не может выйти за границы zero–page, "проворачивается" через ноль при превышении 255.
— Данное по 16–битному адресу, хранимому по 8–битному адресу в zero–page увеличенному на X (X–indexed indirect или X–idx ind). Примечание: адрес в zero–page при увеличении на X не выходит за её границы.
— Данное по увеличенному на Y 16–битному адресу в zero–page (Y–indexed indirect или Y–idx ind). Примечание: при сложении с Y эффективный адрес не испытывает проблем с пересечением 256–байтных страниц.

Обратите внимание на последние два режима — за недостатком бит в индексных регистрах они берут полные 16–битные адреса из zero–page, что замедляет, но в принципе делает возможным полноценные косвенные обращения к памяти. Забавно, что индесные регистры X и Y здесь в процессе вычисления адреса существенно неортогональны (ведут себя по разному).
Система команд у 6502 тоже менее ортогональна, чем у 6800. Так, например, единственные две инструкции, умеющие адресацию zpg Y–ind — это загрузка/сохранение регистра X из памяти. Кроме того сложение/вычитание всегда учитывают флаг переноса, поэтому перед сложением нередко надо явно очищать его инструкцией CLC. В остальном система команд очень напоминает систему команд 6800 по существу, с поправкой на изменение состава регистров, но с кучей мелких исключений и отклонений от общих правил, так что я даже не буду пытаться её охарактеризовать более подробно.

=A=L=X=Постоялецwww14 фев. 20185:40#211
Самым большим недостатком 6502 является полное отсутствие 16–битной арифметики. А таковая является крайне частым гостем даже в 8–битной среде. Поэтому складывать или вычитать 16–битные числа и адреса этому процессору приходилось за несколько 8–битных операций. Кроме того, несмотря на наличие двух индексных регистров, из–за их 8–битности и специфики применения код копирующий блок памяти не стал меньше ни по числу инструкций ни по занимаемому размеру памяти программы (по сравнению с Motorola 6800).
Тем не менее несмотря на все недостатки и постоянные обращения к памяти быстродействие MOS 6502 было вполне на уровне конкурентов. Более того — в среднем он работал вдвое быстрее типичных конкурентов при одинаковых тактовых частотах! Хотя это можно рассматривать как особенность его архитектуры — сильно привязанной к частоте памяти в которую он почти в каждой инструкции лазил — его тактовые частоты и были как правило вдвое меньше тактовых частот конкурентов тех же лет.

Но несмотря на все недостатки MOS 6502 получил огромную популярность.
Из ПК можно вспомнить 8–битные семейства Apple II, Commodore (например Commodore 64), Atari (например Atari 800), BBC Micro и др.
Из консолей нельзя не вспомнить Famicon/NES/Денди, кроме того были еще Atari 2600/5200/7800.
По большому счёту наверное две трети (если не больше) рынка процессоров для популярных консолей и ПК делили между собой два титана (и их производные) — MOS 6502 и Zilog Z80 о котором было рассказано в предыдущей статье.

WDC 65C02

В 1978 году сотрудник MOS Technology Билл Менш, участвовавший в разработке как Motorola 6800 так и MOS 6502 ушёл уже из этой компании и основал еще одну — Western Design Center для того чтобы выпустить усовершенствованного клона 6502 — WDC 65C02. Этот совместимый с ним процессор сохранил неизменным набор регистров и лишь немного улучшил систему команд — сделал её более удобной и ортогональной заняв 27 из неиспользованных слотов байта кода инструкции. Клоны именно этой ветки стояли в таких системах как компьютеры Apple IIc, Apple IIe или консолях TurboGrafx–16 и Atari Lynx.
Подробно эти улучшения я описывать не буду, они не слишком принципиальны, но к фирме WDC мы еще вернёмся...

Motorola 6809

Осознав угрозу со стороны MOS 6502 Motorola решает нанести ответный удар и в 1979 году выпускает еще один процессор — 6809.
Этот зверь пытается взять всё самое лучшее как из 6800 так и из 6502. В силу значительных отличий он теряет бинарную совместимость с 6800, однако снова перед командой разработчиков ставится более скромная задача: обеспечить, чтобы программы на ассемблере для 6800 могли быть оттранслированы с минимальными изменениями под новый процессор. Это было обеспечено включением регистров 6800 как подмножества регистров 6809 и созданием более совершенной системы команд.

Транзисторов: ~9000
Инструкций: 59
Частота: 0,89–4 МГц

Регистры:
— Два 8–битных аккумулятора A и B, которые в небольшом подмножестве инструкций могли использоваться как один 16–битный аккумулятор D
— Регистр флагов (8 бит)
— Два 16–битных индексных регистра X и Y
— 16–битный указатель системного стека S
— 16–битный указатель пользовательского стека U
— 16–битный счётчик команд PC
— 8–битный селектор верхнего байта адреса для zero–page, которая здесь называется уже direct–page (DP)

Как видно здесь одновременно присутствуют два аккумулятора как в 6800, но при этом индексных регистра тоже два — X и Y как в 6502, зато в отличие от последнего эти индексы 16–битные, как и указатель стека. Плюс ко всему добавлен еще регистр "пользовательского стека" стека U, с которым можно обращаться почти так же как со стеком обычным (S).
Система команд значительно прибавила в ортогональности и режимах адресации, но основной принцип остался неизменным — арифметико–логические команды преимущественно берут второй аргумент из памяти.
Чтобы понять насколько система команд стала богаче достаточно рассмотреть режимы адресации данных:
— Непосредственное данное в инструкции (immediate).
— Данное в памяти по 16–битному адресу хранимому в инструкции (extended)
— Данное в памяти по адресу который хранится в памяти по 16–битному адресу хранимому в инструкции (extended indirect)
— Данное в памяти по адресу 256*DP+байт хранимый в инструкции (direct page). То есть аналог zero–page теперь может находится в разных страницах памяти на выбор.
— Данное в памяти по адресу: содержимого одного из регистров X/Y/U/S опционально сложенному либо с константой заданной в инструкции (5, 8 или 16 бит) либо одним из аккумуляторов A, B (8 бит) или D (16 бит) (indexed)
— Данное в памяти по адресу PC плюс константа в инструкции (8 или 16 бит) (indexed PC)
— Данное в памяти по адресу одного из регистров U/Y/U/S с пост–инкрементом или пре–декрементом содержимого этого регистра на 1 или 2 байта (auto inc/dec)
— Три предыдущих режима адресации (indexed, indexed PC и auto inc/dec) могли быть переключены в косвенный режим (indirect), когда полученный на первом шаге адрес использовался для извлечения из памяти другого 16–битного адреса где уже лежит искомое данное (indirect indexed, indirect indexed PC и indirect auto inc/dec соответственно). Исключениями из режима indirect являются 5–битные смещения в режиме indexed и однобайтные автоинкременты/декременты в режиме auto inc/dec.

Как видно существуют весьма продвинутые для 8–битного поколения режимы адресации. Кроме того для удобства добавлены 16–битные сложение/вычитание с аккумулятором D и 16–битные сравнения для регистров D/X/Y/U/S. Со столь глубокой системой команд 6809 получает некоторое пенальти — коды многих его инструкций становятся двухбайтовыми. Все предыдущие процессоры описанные выше кодировали код инструкции одним байтом, хотя следом и могли идти один или два байта данных для инструкции. В 6809 сам код инструкции уже мог занимать два байта, а следом еще могли идти данные.

Однако несмотря на своё техническое превосходство 6809 не получает должной популярности — персональные компьютеры использующие его в качестве центрального процессора были, но сверхпопулярными они не получились.

WDC 65C816

В 1982 году Apple обратилось к Биллу Меншу из вышеупомянутого Western Design Center с просьбой разработать для своей успешной серии компьютеров Apple II усовершенствованную версию процессора, совместимую с используемым 6502, но способную адресовать больше памяти и оперировать 16–битными числами. WDC взялось за разработку и в 1984 году появляется WDC 65C816 — 16–битное усовершенствование 8–битного WDC 65C02, который в свою очередь был улучшенным MOS 6502.

Процессор 16–битный и может адресовать до 16 Мб памяти (24 бита адреса) с помощью сегментации памяти введением 8–битных регистров банков, добавляемых как старший байт к обычному 16–битному адресу 6502.

Регистры:
— 8–битный аккумулятор A и 8–битное дополнение к нему B, которые вместе образуют 16–битный аккумулятор C.
— 8/16–битные индексные регистры X и Y.
— 8/16–битный регистр стека S
— счетчик инструкций PC
— 16–битный регистр direct page (DP) — прибавляется к адресу при адресации zero–page, которая в отличие от 6809 может начинаться в любом байте 64 Кб–тного пространства
— 8–битный сегмент банка данных DB (data bank) — добавляется сверху к 16–битному адресу для получения 24–битного при сохранении/извлечении данных.
— 8–битный сегмент банка программы PB (program bank) — добавляется сверху к 16–битному адресу для получения 24–битного при считывании инструкций.

Процессор стартует в 8–битном режиме и полностью совместим в нём с 65C02, плюс имеет новые инструкции (например обмен B и A), которыми забиты все оставшиеся незанятые в 65C02 слоты байта инструкции. Далее процессор можно переключить в "native mode", когда раскрывается его 16–битность. Раскрывается она, однако, довольно прямолинейным образом — все инструкции работающие ранее с 8–битным аккумулятором A без изменения кодов инструкций начинают работать с 16–битным аккумулятором C, 16–битными индексными регистрами и 16–битными словами в памяти соответственно. Чтобы работать с байтами процессору надо обратно переключить аккумулятор в 8–битный режим — это делается отдельными инструкциями. Вообще есть два флага контроля битности — один контролирует 16–битность аккумулятора, а другой — 16–битность индексных регистров — их можно включать/выключать пораздельно, поэтому в "native mode" 65C816–ый может имитировать среду выполнения 65C02 выделив под неё 64 Кб памяти в любом месте 16–мегабайтного адресного пространства. Для более удобной работы к базовым инструкциям (сохранения/загрузки, сложения/вычитания и AND/OR/XOR) добавлены 24–битные режимы адресации, плюс адресации относительно стека. Так же введены блоковые инструкции копирования памяти.

Из машин использовавших этот процессор или его клонов можно отметить ПК Apple II GS и консоль Super Nintendo Entertainment System (SNES).

Заключение

Процессоры 8–битного семейства Motorolola/MOS/WDC оставили огромный след в истории компьютерной техники. Когда то этот род доминировал среди цифровых папоротников и электрических хвощей, деля большую часть ниши с конкурентами из Intel/Zilog. Однако, как и в случае с Zilog, род этот со временем вымер и сейчас существует только в виде разнообразных микроконтроллеров до боли похожих архитектур (например STMicroelectronics STM8), да реликтовых ископаемых на полках компьютерных ретрогиков.
Когда в своё время Motorola захотела уже сделать 16–битный процессор следующего поколения она разработала... 32–битный микропроцессор Motorola 68000 (m68k), который, несмотря на нумерацию, ничего общего не имел с вышеописанным семейством, обладал огромной кучей 32–битных регистров повышенной ортогональности и 16–битным назывался в первых ревизиях только из–за 16–битного ALU, выполняющего прозрачно для программиста 32–битные операции в несколько действий.
Motorola 68000 применялся, например, в качестве центрального процессора в 16–битной консоли Sega Mega Drive, компьютерах Apple Macintosh, Atari ST и многих других, но это уже совсем другая история.

nonamezeroxПостоялецwww14 фев. 201811:00#212
=A=L=X=
> в качестве центрального процессора в 16–битной консоли Sega Mega Drive

Вот до сих пор считаю, что маркетологи сеги зря хлеб жевали.

В ту волну треша и угара с битностью (под которой все понимали строго то, что выгодно для продвижения продукта) они могли смело обзывать сегу мегадрайв 32-битной консолью и даже при этом не особо соврать. Вместо этого придумали какой то жалкий и непонятный никому лозунг "blast processing". Нужно было сразу рубить "У нас консоль 32 бита, ХАХА мы сразу на два поколения прыгнули!!!! Нинтенда со своими 16 битами через 2 года заранее  сасет и слита в дно!"

Правка: 14 фев. 2018 11:03

=A=L=X=Постоялецwww14 фев. 201811:30#213
nonamezerox

Имхо, они резонно опасались, что их конкуренты начнут "выводить на чистую воду", в то время агрессивная реклама была, они сами там отличились со своим nintendon't.

=A=L=X=Постоялецwww14 фев. 201811:41#214
P.S.

В конце концов битность процессора в первую очередь определяется битностью его ALU и технически первые m68k ну никак не могли тут похвастать 32-битностью.
Те же Z80 к примеру хоть и имели 16-битные операции, но нифига - 16-битными это их не делало - ALU было 8-битным.

nonamezeroxПостоялецwww14 фев. 201813:23#215
=A=L=X=

> В конце концов битность процессора в первую очередь определяется битностью его ALU и технически первые m68k ну никак не могли тут похвастать 32-битностью.

В те времена это никого не смущало и маркетинговые биты брали те, которые удобно:

Был турбографикс-16 (с восьмибитным 65SC02).

Был хрестоматийный пример (Центральный процессор на самом деле тот самый 68000 который 16 бит по критерию ALU)):

Была sega dreamcast (позиционировалась как 128-битная консоль, на деле - 32битный процессор и 2 инструкции которые работают с группами fpu регистров)

Правка: 14 фев. 2018 13:23

0iStalkerМодераторwww14 мар. 201812:58#216
Продолжаю корёжить схему спектрума, из соседней темы. В процессе решил, таки, добавить  отсутствующий KEMPSTON джойстик. Ну и если ближе к сабжу, то выяснилось, что данные данные на шину передаются путём анализа состояния 5 бита шины адреса (там должен быть ноль), т.е. и порт 31 и порт 95 это одно и то же устройство. Ну учитывая, что данные с клавиатуры передаются через анализ 0-го бита шины адреса, получается интересная картина, - ребяты на заре компьютеростроения вообще не заморачивались насчёт переферии, в угоду простоте и себестоимости,  16-ти  портов ввода/вывода(из 65535 возможных) должно было хватить всем.
DexusУчастникwww14 мар. 201813:34#217
0iStalker
Почему не взял harlequin?
0iStalkerМодераторwww14 мар. 201816:31#218
Dexus
> Почему не взял harlequin?
>

Так не интересно, брать готовое, ну к тому же, он на 99.(9)% совместим со спектрумом на ULA, со всеми недостатками. А тут твори, что хочешь (реально оно уже на 80% с "оригиналом" не совпадает, хотя 3х-платную парадигму пока оставил, это поможет потом с расширением памяти).  Ради прикола решил ещё и AY вкорячить, хоть пользы от него на 48кб не много (но демо/интро послушать можно будет).  Ну и вменяемые пояснения очень сильно помогли в понимании того, что происходит в кишках.  Взяв готовую и отлаженную схему я бы этого ничего не узнал.

Правка: 14 мар. 2018 16:35

DexusУчастникwww14 мар. 201817:51#219
0iStalker
Советую всё-таки 128 вкорячить. Если не сильно беспокоишься о совместимости то по поводу таймингов при переключении видеоэкранов наверное не нужно париться. Хотя на самом деле я бы что-то типа harlequin и nuvo и пытался делать. Иначе какой смысл? Насладиться не выйдет, эксперименты все равно бестолковые будут.
=A=L=X=Постоялецwww14 мар. 201817:58#220
0iStalker
> ребяты на заре компьютеростроения вообще не заморачивались насчёт переферии, в
> угоду простоте и себестоимости

Но ведь в данном случае в принципе этого оказалось вполне себе как раз достаточно. Хотя да, неаккуратненько как то.

=A=L=X=Постоялецwww21 мар. 20185:08#221
По наводке автора вот этого порта: http://hype.retroscene.org/blog/dev/798.html немного почитал про аркадный автомат PacMan. Выявились кое-какие забавные подробности. :)
PacMan вообще появился именно как аркадный автомат от Namco в 1980 году и позднее был портирован на многие другие платформы, включая денди.

Изображение

Процессором у него, кстати, служил старый добрый Z80.
Как видно изначально у него была вертикальная ориентация экрана разрешение которого составляло при этом 28x36 тайлов (8x8 пикселей).
И вот тут перед разработчиками аркадной машины встала небольшая незадачка - числа 28 и 36 были "двоично неровные", чтобы вычислять произвольный адрес в квадратной такой матрице нужно было умножать на количество тайлов в строке, что было неудобно за отсутствием в Z80 умножения. В идеале было бы отлично, если бы количества тайлов в строке делились на степень двойки, чтобы можно было обойтись двоичными сдвигами.
Окей. И тут инженерная мысль снова сверкнула молнией - поступили разработчики достаточно просто, но в то же время необычно. Они выделили по 2 строки тайлов снизу и сверху экрана в особые области - для отображения игровой статистики, так что игровая зона стала размером 28x32 тайла. Появились заветные 32 в колонке - окей, это уже что-то. Но что делать с огрызками по 2x28 полосок сверху и снизу? Да тоже уложим их в полоски по 32 с избытком, избыток не будем отображать, а ориентацию вывода на экран при этом поменяем.
В итоге раскладка видеопамяти машины приобрела следующую форму: https://www.walkofmind.com/programming/pie/video_memory.htm
Для тех кому лень искать где начинаются, продолжаются и куда растут адреса, я нарисовал картинку того как лежат в памяти видеочипа номера тайлов в заднем фоне в порядке линейного обхода:

Изображение

Жирная линия - тайлы, а тонкая - там где происходит переход к следующей порции видеоданных.
Довольно забавно, вертикальные учатски сменяются горизонтальными, само сканирование идёт справа-налево и эти вот "ушки" из 8 краевых байт сверху и снизу как раз и не отображаются на экране, выпадая за него.

Правка: 21 мар. 2018 9:16

monobogdanПостоялецwww21 мар. 20188:53#222
=A=L=X=
Это просто таблица из номеров тайлов(типа тайл хранится в виде 16 байт baseaddr + (tilenum * 16))?

Правка: 21 мар. 2018 8:55

=A=L=X=Постоялецwww21 мар. 20189:14#223
monobogdan
> Это просто таблица из номеров тайлов

В терминах NES это nametable, да.

monobogdanПостоялецwww21 мар. 20189:21#224
=A=L=X=
Значит есть и отдельная область для фонов? Просто помню где то читал о костылях, что слишком больших боссов в некоторых играх делали как фон на NES.

Правка: 21 мар. 2018 9:21

Страницы: 114 15 16 1731 Следующая »

/ Форум / Флейм / Железо

2001—2018 © GameDev.ru — Разработка игр