Процессор Денди (CPU)
Как отмечалось ранее, первая (многокорпусная) модель NES строилась на базе процессора 6502 (6527). Все последующие модели сверху вниз совместимы с ней. По неподтвержденной информации контроллер UM6561 – намного более совершенен и имеет ряд новых возможностей (которые, надо понимать, в дань совместимости, никто не использует). Поэтому, говоря о процессоре Денди, – опираемся на архитектуру 6502.
Итак — CPU 6502 имеет:
· Шина Адреса – 16 бит (адресное пространство 64кб)
· Шина Данных – 8 бит
· Частота (для версии PAL) – 1.79 МГц
· Встроенный pAPU (4 аналоговых + 1 цифровой канал)
Подробнее о программной модели 6502 можно прочитать в приложении 1. Примеры принципиальных схем и их описания в приложении 5.
Здесь же мы рассмотрим, как этот процессор используется в Денди. Модель 6502 предусматривает единое адресное пространство кода и данных. Также в процессоре отсутствуют инструкции обращения к портам ввода/вывода (типа in/out) – порты должны отражаться на адресное пространство памяти. Т.е. адресное пространство процессора делится между портами и памятью. В архитектуре Денди это происходит так (кстати, по-моему, не очень рационально):
| Адрес | Размер | Назначение |
| $0000-$07FF | 2k | RAM |
| $0800-$1FFF | 6k | RAM Mirror (x3) |
| $2000-$2007 | $8 = 8 байт | Registers Video |
| $2008-$3FFF | $1FF8 = 8184 байта | Registers Video Mirror (x1023) |
| $4000-$4017 | $20 = 32 байта | Registers Audio & DMA & I/O |
| $4018-$4FFF | $0FE8 = 4072 байта | Not used |
| $5000-$5FFF | 4k | Expansion ROM (for MMC5) |
| $6000-$7FFF | 8k | SRAM (WRAM) |
| $8000-$BFFF | 16k | PRG-ROM (1) |
| $C000-$FFFF | 16k | PRG-ROM (0) |
RAM – 2кб. Оперативной памяти (на плате приставки или внутри контроллера) – её распределение следующее:
- $0000-$00FF – “Нулевая страница” (Zero Page) – используется для системных целей (для программ предпочтительны адреса $10-$9F, прочие лучше не трогать). Процессор имеет отдельные инструкции, обеспечивающие быстрый доступ к нулевой странице.
- $0100-$01FF – Аппаратный стек от старших адресов (размер, понятно, 256 байт).
- $0200-$07FF – Пользовательская область.
Начиная с адреса $0800 из-за неполной дешифрации адреса, идут три «зеркала» оперативной памяти RAM. Т.е. обращение к ячейке $0000 эквивалентно обращению к $0800 или к $1000 или к $1800. (Интересно, что мешало разработчикам установить еще 6 килобайт памяти – лишнего, наверное, бы не было).
Registers Video – 8 шт. Через эти регистры видеопроцессора (и только через эти регистры) осуществляется связь центрального процессора с видеопроцессором, а через него и с видеопамятью. Подробнее см. главу «Видеопроцессор Денди (PPU)». Далее с адреса $2008 идут «зеркала» регистров видеопроцессора.
Registers Audio & DMA & I/O – 24 шт. Регистры звукового сопроцессора, контроллера DMA и портов ввода/вывода. Подробнее см. соответствующие главы. Назначение остальных ($0FE8=4072шт.) адресов не определено.
Expansion ROM (for MMC5) – 4кб. Расширение ОЗУ – только у маппера MMC5 (см. главу «Картридж Денди»)
SRAM – 4кб. (она же WRAM) – статическое ОЗУ, которое может находиться на картридже – служит для хранения игровых ситуаций (сохранение игры на время выключения питания, с возможностью последующего продолжения).
PRG-ROM – 2 окна по 16кб. Чтобы подробно рассмотреть назначение этих участков памяти – необходимо иметь представление об архитектуре картриджа (а вариантов тут много), о чем пойдет речь несколько позже. Здесь же рассмотрим самую простую модель картриджа: картридж содержит две ПЗУ размером 32кб и 8кб, подключаются они к шинам процессора (CPU) и видеопроцессора (PPU) соответственно (см. рис.1). Первая (в нашем примере 32кб) микросхема ПЗУ функционально называется PRG-ROM, и содержит в себе программу и возможно данные. Первые 16кб ПЗУ отображаются в окне 1 ($8000-$BFFF), последние 16кб в окне 0 ($C000-$FFFF). Организовано это на схемотехническом уровне. В конце нулевого окна располагаются вектора прерываний процессора.
· $FFFA – NMI (VBlink)
Немаскируемое прерывание. Поступает с видеопроцессора и сигнализирует о том, что PPU закончил прорисовку очередного кадра и «луч» пошел обратно (в начало экрана). Обработчик этого прерывания должен производить необходимые, по программе, обновления видеопамяти. Во время прорисовки кадра видеопамять недоступна. Существует возможность программного отключения видеопроцессора – NMI формироваться не будет, но также будет отсутствовать и картинка на экране – в этом режиме доступна запись (используется при начальной инициализации).
Происходит по факту включения питания или при нажатии на клавишу «Reset». Стоит помнить, что в последнем случае изменяется только программный счетчик, все регистры, а тем более память сохраняют свои значения.
Единственное в системе «пользовательское» прерывание. Возникает по активному сигналу на входе процессора (выведен на разъём картриджа). Или может вызываться программно – инструкция BRK.
Соответственно по этим адресам должны находиться адреса обработчиков соответствующих прерываний. Приоритет прерываний следующий (от более приоритетного к менее): RESET, NMI, IRQ/BRK.
Какой процессор в денди
Как отмечалось ранее, первая (многокорпусная) модель NES/ Famicom строилась на базе процессора Ricoh RP 2 A 03 (архитектура 6502) или его аналога. Все последующие модели сверху вниз совместимы с ней. Не исключено, что SoC UM6561 более совершенен, имеет расширенную систему команд, а возможно и другие "фичи" (которые, надо понимать, в дань совместимости, как правило, не используются). Поэтому, говоря о процессоре Денди, – опираемся на базовую архитектуру 6502, реализованную в «классическом» RP 2 A 03 (универсальном), или RP 2 A 07 — только для варианта PAL .
Итак — CPU 6502 имеет:
- Шина Адреса – 16 бит (адресное пространство 64k);
- Шина Данных – 8 бит;
- Частота (для версии PAL) – 1.79 МГц;
- Встроенный звуковой сопроцессор «pAPU» (пятиканальный: 4 «аналоговых» + 1 «цифровой» DMC-канал);
- Контроллер DMA;
Подробнее о системе команд 6502 можно прочитать в приложении 1. Примеры принципиальных схем и их описания — в приложении 5.
Здесь же мы рассмотрим, как этот процессор используется именно в Денди.
Распределение адресного пространства.
Модель 6502 предусматривает единое адресное пространство кода и данных (принстонская архитектура). Также в процессоре отсутствуют инструкции обращения к портам ввода/вывода (типа in/out) – порты должны отражаться на адресное пространство памяти. Т.е. адресное пространство процессора делится между портами и памятью. В архитектуре Денди это происходит так (кстати, по-моему, не очень рационально):
Registers Video
$1FF8 = 8184 байта
Registers Video Mirror (x1023)
Registers Audio & DMA & I/O
$0FE8 = 4072 байта
Expansion ROM\RAM (etc. in MMC5)
SRAM (aka WRAM) (etc. in MMC3)
RAM – Оперативная память (на плате приставки или внутри SoC ) объемом 2 k – её распределение следующее:
- $0000-$00FF – “Нулевая страница” (Zero Page) – используется для системных целей (для пользовательских программ предпочтительны адреса $10-$9F, прочие лучше не трогать). Процессор имеет отдельные инструкции, обеспечивающие быстрый доступ к нулевой странице. Таким образом, с учетом малого количества регистров в самом процессоре, нулевая страница может выполнять роль «регистрового банка».
- $0100-$01FF – Аппаратный стек от старших адресов (размер, понятно, 256 байт).
- $0200-$07FF – Пользовательская область оперативной памяти.
Начиная с адреса $0800 из-за неполной дешифрации адреса, идут три «зеркала» RAM. Т.е. обращение к ячейке $0000 эквивалентно обращению к $0800 или к $1000 или к $1800. (Интересно, что мешало разработчикам установить еще 6 килобайт памяти – лишнего наверняка бы не было).
Registers Video [8 шт.] – через эти регистры видеопроцессора (и только через эти регистры) осуществляется связь центрального процессора с видеопроцессором, а через него и с видеопамятью. Подробнее см. главу «Видеопроцессор Денди (PPU)». Далее с адреса $2008 идут «зеркала» регистров видеопроцессора.
Registers Audio & DMA & I / O [24 шт.] – регистры звукового сопроцессора, контроллера DMA и портов ввода/вывода. Подробнее см. соответствующие главы. Назначение остальных ($0FE8=4072 шт.) адресов не определено, но может использоваться внешними звуковыми процессорами, располагающимися на картридже.
Expansion ROM \ RAM [4k] – расширение ПЗУ\ОЗУ (или любое другое, располагающееся на картридже) – используется, например, маппером MMC5 (см. главу «Картридж Денди»)
SRAM (она же WRAM) [8 k ] – статическое ОЗУ, которое также может находиться на картридже. Являясь полноценным ОЗУ для процессора, может использоваться для любых целей, в том числе и для хранения (исполнения) программы. Как правило, в этой области игры хранят данные состояния текущей игровой локации в процессе игры (маппер MMC3). При необходимости сохранения игровых ситуаций, эта микросхема питается от батарейки, расположенной на картридже (сохранение игры на время выключения питания, с возможностью последующего продолжения).
PRG-ROM [32 k ] – зачастую представлено 2 окнами по 16 k (иногда 4 по 8 k или другой вариант логического разбиения — в зависимости от маппера, для более гибкого варьирования страничной адресацией памяти картриджа, см. главу «Картридж Денди»). Чтобы подробно рассмотреть механизмы эффективного использования этого участка памяти – необходимо иметь представление об архитектуре конкретного картриджа (а вариантов тут много), речь о них пойдет позже. Самая простая архитектура картриджа маппера не содержит, в картридже есть лишь две ПЗУ размером 32k и 8 k , подключаются они к шинам процессора (CPU) и видеопроцессора (PPU) соответственно (см. рис.1). Первая (в нашем примере 32 k ) микросхема ПЗУ функционально называется PRG-ROM, и содержит в себе программу и возможно данные. Первые 16 k ПЗУ отображаются в окне 1 ($8000-$BFFF), последние 16 k в окне 0 ($C000-$FFFF). Организовано это на схемотехническом уровне. В конце нулевого окна располагаются вектора прерываний процессора.
Система прерываний.
Архитектура 6502 предусматривает всего 3 прерывания. Рассмотрим подробнее случаи их возникновения, предварительно указав адреса в таблице векторов прерываний.
$FFFA – NMI (VBlink)
Немаскируемое прерывание. Поступает с видеопроцессора и сигнализирует о том, что PPU закончил прорисовку очередного кадра и «луч пошел обратно» (в начало экрана). Обработчик NMI должен производить в этот момент (ограниченное время) необходимые по программе обновления данных видеопамяти, т.к. во время прорисовки строк кадра видеопамять недоступна (из нее осуществляет чтение PPU). Существует возможность программного отключения видеопроцессора – в этом режиме доступна запись в видеопамять (неограниченное время) прерывание NMI формироваться не будет, но также будет отсутствовать и картинка на экране (используется при начальной инициализации).
$FFFC – RESET
Происходит по факту включения питания или при нажатии на клавишу «Reset». Стоит помнить, что в последнем случае изменяется только программный счетчик, все регистры, а тем более память сохраняют свои значения.
$FFFE — IRQ/BRK
Единственное в системе «пользовательское» прерывание. Возникает по активному сигналу на соответствующем входе процессора, который выведен на разъём картриджа и порт расширений (или может вызываться программно – инструкция BRK). Таким образом вызывать обработчик данного прерывания может как периферия, расположенная на картридже (например, маппер), так и устройства, подключенные к порту расширений («разъем второго джойстика»).
Соответственно по указанным адресам (в «таблице векторов прерываний») должны находиться инструкции перехода к обработчикам соответствующих прерываний. Приоритет прерываний следующий (от более приоритетного к менее): RESET, NMI, IRQ/BRK.
Какой процессор в денди
Адреса 0000h — 07FFh: здесь располагается встроенное ОЗУ приставки, используемое для хранения переменных во время работы программы, а также нулевая страница памяти и стек процессора. При выключении питания содержимое этой области памяти теряется.
Адреса 0800h — OFFFh: обращение по любому из указанных адресов приведет к обращению к встроенному ОЗУ приставки, следовательно, адрес 0800h аналогичен адресу 0000h, адрес 0801h- адресу 0001h и т.д.
Адреса 1000h — 17FFh: то же, что и для адресов 0800h — 0FFFh.
Адреса 1800h — 1FFFh: то же, что и для адресов 0800h — 0FFFh.
Адреса 2000h- 2007h: регистры видеопроцессора.
Адреса 4000h-4016h: регистры звукового процессора, контроллера прямого доступа к памяти (ПДП) и контроллера ввода/вывода.
Адреса 5000h — 5FFFh: в стандартной конфигурации не используются, предназначены для модулей расширения.
Адреса 6000h — 7FFFh: оперативная память картриджа. Может отсутствовать.
Адреса 8000h — BFFFh: переключаемый банк постоянной памяти программ картриджа. В простейших картриджах не применяется.
Адреса С000h — FFFFh: непереключаемый банк постоянной памяти программ картриджа. Присутствует в любом картридже независимо от размера памяти. По этим адресам всегда подключаются последние 16 Кб ПЗУ картриджа. В шесть ячеек ПЗУ с адресами FFFAh — FFFFh записаны адреса процедур обслуживания прерываний.
Карта видеопамяти
Карта распределения адресного пространства видеопроцессора игровой приставки DENDY представлена на рис. 1.6.

Как видно из рис. 1.6, видеопроцессор может работать с 16 Кб памяти в диапазоне адресов 0000h-3FFFh. Однако, как и в случае с центральным процессором, объем реально присутствующей памяти гораздо меньше: он составляет всего 2 Кб.
В видеопамяти приставки DENDY выделено несколько областей, имеющих различное назначение. Рассмотрим, как они влияют на формирование изображения.
Знакогенератор. Эта область видеопамяти занимает первые 8 Кб с адресами 0000h — 1FFFh. Здесь хранятся битовые образы выводимых на экран символов. Под символом в данном случае подразумевается блок изображения размером 8×8 точек. Каждый битовый образ требует 16 байт памяти. Видеопроцессор совмещает две части битового образа, в результате чего получается четырехцветное изображение. Цвет с кодом, два младших разряда которого равны 0, всегда воспринимается видеопроцессором как прозрачный.
Этот процесс поясняется на рис. 1.7.
Как видно из рис. 1.6, область памяти 0000h -1FFFh разделена на две таблицы знакогенераторов с базовыми адресами 0000h и 1000h. Одна таблица хранит изображения блоков, из которых строится фоновая картинка, в другой находятся битовые образы спрайтов. Назначение таблиц определяется программным путем при записи кода в управляющий регистр видеопроцессора.
Итак, первым этапом, необходимым для вывода изображения на экран, является разработка знакогенераторов для фона и спрайтов. Из сделанных вами блоков и будет состоять показываемая картинка.

Обычно в ПЗУ игрового картриджа содержится один или несколько заранее записанных знакогенераторов. Микросхема контроллера управления страницами памяти подключает один из них в адресное пространство видеопроцессора, и все его символы становятся доступными для вывода на экран.
Экранная страница. В адресном пространстве видеопроцессора DENDY располагаются четыре экранные страницы. Однако установленной в игровой приставке памяти хватает только для размещения двух экранных страниц, одна из которых называется активной. Как программы используют эти страницы, будет объяснено ниже. Каждая экранная страница делится на область символов и область атрибутов.
Активная экранная страница — это страница видеопамяти, содержимое которой служит для формирования изображения на экране.
Область символов — часть экранной страницы, включающая информацию о номерах элементов знакогенератора, из которых строится изображение.
Область атрибутов — часть экранной страницы, где хранятся сведения о цвете элементов знакогенератора, из которых строится изображение.
Область символов каждой экранной страницы содержит 960 байт и представляет собой сетку из 30 строк по 32 символа в каждой. Таким образом, размер экрана равен 256×240 точек.
Важное отличие NTSC-версии приставки состоит в том, что верхний и нижний ряды символов на экране не показываются и размер видимого изображения по вертикали уменьшается до 224 точек
Предположим, что на экран нужно вывести букву «А», битовый образ которой уже размещен в знакогенераторе по адресу 0100h (рис. 1.7). Если активна первая экранная страница, то запись числа 01h в видеопамять по адресу 2000h приведет к появлению буквы в верхнем левом углу экрана (только в PAL-версии).
Сразу за областью символов начинается область атрибутов экранной страницы, занимающая 64 байта. Каждая ячейка области атрибутов хранит информацию о цвете четырех смежных квадратов размером 2×2 символа, которые в свою очередь образуют квадрат 4×4 символа. Таким образом, два младших бита ячейки области атрибутов первой экранной страницы с адресом 23C0h содержат данные о цвете для символов, располагающихся в ячейках области символов первой экранной страницы с адресами 2000h, 2001h, 2020h и 2021h.
Структура экранной страницы игровой приставки DENDY представлена на рис. 1.8.


Возможности видеопроцессора
Разнообразие и качество программного обеспечения игровой приставки в значительной степени определяются возможностями видеопроцессора и теми манипуляциями с графической информацией, которые он в состоянии производить сам, в то время как центральный процессор приставки занят другими задачами.
Игровая приставка DENDY, как уже было сказано, создавалась для использования спрайтовой графики. Спрайты — графические блоки фиксированного размера, которые обрабатываются видеопроцессором независимо от основного изображения.
Видеопроцессор DENDY позволяет выводить на экран до 64 спрайтов размером 8×8 или 8×16 точек каждый, передвигать спрайты и фон независимо друг от друга и плавно прокручивать фоновую картинку в любом направлении. Рассмотрим эти функции устройства более подробно.
Спрайты. Если в игре используются спрайты размером 8×8 точек, то их изображения хранятся в одном из знакогенераторов, расположенных в видеопамяти. Если применяются спрайты размером 8×16 точек, то изображения спрайтов с четными номерами помещаются в знакогенератор 0 (с базовым адресом 0000h), а с нечетными — в знакогенератор 1 (с базовым адресом 1000h). Иногда контроллер страниц памяти, установленной в картридже, дополнительно подключает ПЗУ, где изображения спрайтов записаны заранее.
Память спрайтов. Это отдельная страница памяти видеопроцессора, которая содержит информацию о специальных графических блоках — спрайтах.
Память спрайтов занимает 256 байт, которые не входят в адресное пространство видеопроцессора. Для каждого из 64 спрайтов, с которыми может работать видеопроцессор игровой приставки, отведено по четыре байта.
В этих байтах располагается следующая информация:
1. Координата верхнего левого утла спрайта по вертикали.
2. Номер блока с изображением спрайта в знакогенераторе.
3. Атрибуты спрайта:
D7 — отражение спрайта относительно вертикальной оси:
1 — выводится зеркальное отражение спрайта;
0 — выводится обычный спрайт.
D6 — отражение спрайта относительно горизонтальной оси:
1 — выводится зеркальное отражение спрайта;
0 — выводится обычный спрайт. D5 — приоритет спрайта:
1 — спрайт поверх фона; 0 — фон поверх спрайта.
D4 — D2 — не используются.
D1, D0 — два старших бита для формирования цветовой информации.
4. Координата верхнеголевого угла спрайта по горизонтали.
На одной линии экрана может располагаться не более 8 спрайтов. При написании программ для игровой приставки следует помнить об этом ограничении.
На экране спрайты всегда представлены в соответствии со своим приоритетом. Если вывести в одно и то же место экрана два спрайта, то верхним окажется спрайт с меньшим номером. Номер спрайта определяется положением его описания в памяти спрайтов. Таким образом, данные о спрайте 0 занимают первые четыре байта памяти спрайтов, о спрайте 1 -вторые четыре байта и т.д.
Информация в память спрайтов может быть записана непосредственно через регистры видеопроцессора или с помощью контроллера прямого доступа к памяти.
Скроллинг изображения. Видеопроцессор игровой приставки позволяет плавно прокручивать фоновое изображение в вертикальном или горизонтальном направлении независимо от спрайтов.
При вертикальной прокрутке две экранные страницы объединяются в общее изображение размером 256×480 точек, которое можно перемещать вверх или вниз.
При горизонтальной прокрутке две экранные страницы группируются в изображение размером 512×240 точек, которое передвигается вправо или влево. Выбор способа отражения экранных страниц, которые рассматривались выше, зависит от используемого вида аппаратного скроллинга. Скроллинг изображения осуществляется путем записи значения смещения в специальный регистр видеопроцессора.
Организация экранной памяти при аппаратной прокрутке изображения показана на рис. 1.10.
Кадровый синхроимпульс. Доступ к видеопамяти игровой приставки возможен только через регистры видеопроцессора при его программном выключении или во время кадрового гасящего импульса.
Рассмотрим более детально процесс формирования изображения на экране телевизора.

Генерация кадра начинается с левого верхнего угла и идет по строкам вниз. По окончании вывода каждой строки в видеосигнал добавляется строчный синхроимпульс. Так последовательно отображаются все 240 строк, составляющие полный экран. В завершение видеопроцессор посылает одновременно кадровый синхроимпульс и сигнал немаскируемого прерывания NMI. Это занимает время, необходимое для вывода четырех телевизионных строк. Затем видеопамять становится доступной в течение периода формирования кадрового синхроимпульса. Данный период равен времени, затрачиваемому на вывод 20 телевизионных строк, после чего доступ к видеопамяти запрещается и начинается развертка нового кадра. Такой процесс повторяется 50 раз в секунду для системы PAL и 60 раз в секунду для NTSC.
Слои изображения. Создаваемое игровой приставкой DENDY изображение состоит из четырех независимых слоев. Рассмотрим их, начиная с самого нижнего:
1. Полностью окрашенный экран, цвет которого определяется содержимым ячейки видеопамяти с адресом 3F00h.
2. Спрайты с битом приоритета, равным 0.
3. Фоновое изображение.
4.Спрайты с битом приоритета, равным 1.
Регистры видеопроцессора
Всю работу по формированию изображения на экране центральный процессор осуществляет, передавая данные видеопроцессору через регистры управления и получая данные из регистров контроля состояния видеопроцессора.
Назначение регистров описано ниже.
Регистр 1 управления видеопроцессором
Адрес: 2000h.
Тип: запись.
Назначение разрядов:
D7 — формирование запроса немаскируемого прерывания NMI при кадровом синхроимпульсе:
0 — запрещено;
1 — разрешено.
D6 — не используется, должен быть равен 0. D5 — размер спрайтов:
0 — 8×8 точек;
1 — 8×16 точек.
D4 — базовый адрес знакогенератора для формирования фона:
0 — 0000h;
1 — 1000h.
D3 — базовый адрес знакогенератора для формирования спрайтов:
0 — 0000h;
1 — 1000h.
D2 — приращение адреса при обращении к видеопамяти:
0 — увеличение адреса на 1 (горизонтальная
запись);
1 — увеличение адреса на 32 (вертикальная
запись).
D1, DO — адрес активной экранной страницы:
00 — 2000h;
01 — 2400h;
10 — 2800h;
11 — 2C00h.
Регистр 2 управления видеопроцессором
Адрес: 2001h.
Тип: запись.
Назначение разрядов:
D7 — D5 — яркость экрана/интенсивность цвета (не используется). D4 — управление отображением:
0 — спрайты не видны;
1 — спрайты выводятся.
D3 — управление отображением:
0 — фон не отображается;
1 — фон отображается.
D2 — задание области вывода спрайтов:
0 — спрайты невидимы в крайнем левом столбце из 8 точек;
1 — спрайты видны на всем экране.
D1 — определение области вывода фона:
0 — фон невидим в крайнем левом столбце из 8 точек;
1 — фон присутствует на всем экране.
DO — тип дисплея (не используется).
Регистр состояния видеопроцессора
Адрес: 2002h.
Тип: чтение.
Назначение разрядов:
D7 — флаг кадрового синхроимпульса:
1 — видеопроцессор генерирует кадровый синхроимпульс;
0 — видеопроцессор формирует изображение.
Разряд устанавливается при получении кадрового синхроимпульса и сбрасывается при окончании формирования синхроимпульса или после чтения содержимого регистра.
D6 — флаг обнаружения спрайта 0:
1 — спрайт с номером 0 выведен на экран;
0 — спрайт с номером 0 не обнаружен.
Разряд становится равен 1, когда видеопроцессор начинает вывод на экран спрайта с номером 0 (первый в памяти спрайтов). Например, если координата спрайта 0 по вертикали равна 42, то разряд будет установлен во время показа 42-й строки кадра. Сброс разряда происходит при генерации кадрового синхроимпульса или после чтения содержимого регистра.
D5 — счетчик количества спрайтов на линии:
1 — больше 8 спрайтов на текущей линии;
0 — 8 или меньше спрайтов на текущей линии.
D4 — разрешение записи в видеопамять:
1 — запись запрещена;
0 — запись разрешена.
Регистр адреса памяти спрайтов
Адрес: 2003h.
Тип: запись.
Назначение разрядов.
В регистр записывается 8-разрядное значение кода, определяющее адрес в памяти спрайтов для последующего доступа через регистр 2004h.
Регистр данных памяти спрайтов
Адрес: 2004h.
Тип: запись/чтение.
Назначение разрядов.
Через регистр осуществляется доступ к памяти спрайтов видеопроцессора. Начальный адрес устанавливается путем записи значения кода в регистр 2003h. После каждого обращения к регистру адрес автоматически увеличивается на 1.
Регистр аппаратной прокрутки
Адрес: 2005h.
Тип: двойная запись.
Назначение разрядов.
В регистр последовательно помещаются два кода для осуществления аппаратной прокрутки фонового изображения. Первое записываемое значение передается в регистр вертикальной прокрутки, второе — горизонтальной. Эти значения определяют смещение графического фрагмента от начала экранной страницы. При работе с данной функцией видеопроцессора следует помнить, что эффект отражения экранных страниц не позволяет одновременно использовать вертикальную и горизонтальную прокрутки, если в картридже нет дополнительной видеопамяти.
Регистр адреса видеопамяти
Адрес: 2006h.
Тип: двойная запись.
Назначение разрядов.
В этот регистр последовательно помещаются два байта 16-разрядного адреса для последующего доступа к видеопамяти через регистр 2 007h. Сначала записывается старший байт адреса, затем младший.
Регистр данных видеопамяти
Адрес: 2007h.
Тип: запись/чтение.
Назначение разрядов.
Через регистр осуществляется доступ к видеопамяти. Начальный адрес записывается в регистр 2006h. После каждого обращения к регистру адрес автоматически увеличивается на 1 или на 32 — в зависимости от состояния разряда D2 регистра 2000h. Из-за особенностей конструкции видеопроцессора первое чтение из видеопамяти после установки нового адреса дает неверный результат. Например, для чтения байта, расположенного в видеопамяти по адресу 2000h, необходимо выполнить следующие команды:
При записи данных в видеопамять и при работе с палитрами (адреса 3F00h — 3FlFh) рассмотренная особенность не проявляется. Следует также помнить, что любой доступ к видеопамяти возможен только в момент формирования кадрового синхроимпульса.
Прямой доступ к памяти
Игровая приставка DENDY содержит контроллер прямого доступа к памяти, который позволяет быстро переписать 256 байт из основной памяти в память спрайтов без участия центрального процессора. С точки зрения программирования такой контроллер представляет собой один 8-разрядный регистр с адресом 4014h.
Регистр адреса прямого доступа к памяти
Адрес: 4014h.
Tun: запись.
Назначение разрядов.
В регистр записывается 8-разрядное число, определяющее адрес страницы в основной памяти. Контроллер прямого доступа к памяти передает содержимое выбранной страницы основной памяти в память спрайтов. Например, после записи в регистр 4014h кода C3h в память спрайтов видеопроцессора направляется содержимое основной памяти игровой приставки, расположенное в диапазоне C300h — C3FFh.
Регистры звукового процессора
С точки зрения программирования звуковой процессор представляет собой набор регистров с адресами 4000h — 4015h. Записывая данные в эти регистры, программа сообщает звуковому процессору о параметрах генерируемого сигнала.
Первые два аналоговых канала формируют выходной сигнал с прямоугольной формой импульсов, третий канал — треугольные импульсы, а четвертый — сигнал шума.
Регистр управления канала 1
Адрес: 4000h.
Тип: запись.
Регистр управления генератором канала 1
Адрес: 4001h.
Тип: запись.
Регистр управления частотой канала 1
Адрес: 4002h, 4003h.
Тип: запись.
В эти два регистра записывается 12-разрядное число, задающее частоту выходного сигнала. В регистр 4002h помещаются старшие четыре разряда, а в регистр 4003h — младшие восемь.
Регистр управления канала 2
Адрес: 4004h.
Тип: запись.
Регистр управления генератором канала 2
Адрес: 4005h.
Тип: запись.
Регистр управления частотой канала 2
Адрес: 4006h, 4007h.
Тип: запись.
В эти два регистра записывается 12-разрядное двоичное число, задающее частоту выходного сигнала.
В регистр 4006h помещаются старшие четыре разряда, а в регистр 4007h — младшие восемь.
Регистры управления канала 3 (треугольные импульсы)
Адрес: 4008h, 4009h.
Тип: запись.
Регистр управления частотой канала 3
Адрес: 400Ah, 400Bh.
Тип: запись.
В эти два регистра записывается 12-разрядное двоичное число, задающее частоту выходного сигнала аналогично соответствующим регистрам для каналов 1 и 2.
Регистры управления канала 4 (сигнал шума)
Адрес: 400Ch, 400Dh.
Тип: запись.
Регистр управления частотой канала 4
Адрес: 400Ah, 400Bh.
Тип: запись.
В эти два регистра записывается 12-разрядное двоичное число, задающее частоту выходного сигнала аналогично соответствующим регистрам для каналов 1 и 2.
Регистр управления цифровым каналом
Адрес: 4010h.
Тип: запись.
Регистр управления громкостью цифрового канала
Адрес: 4011h.
Тип: запись.
Число, записываемое в данный регистр, определяет уровень выходного сигнала цифрового аудио-канала. Регистр часто используется при воспроизведении оцифрованной музыки и речи.
Регистр адреса цифрового канала
Адрес: 4012h.
Тип: запись.
Число, записываемое в этот регистр, задает адрес расположения данных для цифрового канала звукового процессора в основной памяти. Адрес вычисляется следующим образом:
(Содержимое регистра 4012h) х 64 + 49152.
Регистр длины блока данных цифрового канала
Адрес: 4013h.
Тип: запись.
Число, записываемое в этот регистр, задает длину блока данных, содержащего информацию для цифрового аудиоканала. Длина блока рассчитывается следующим образом:
(Содержимое регистра 4013h)x 16 + 1.
Регистр управления звуковым процессором
Адрес: 4015h.
Tun: запись.
Назначение разрядов:
D4 — устанавливается в 1 для включения цифрового канала.
D3 — устанавливается в 1 для включения канала шумового сигнала.
D2 — устанавливается в 1 для включения канала с треугольной формой импульсов.
D1 — устанавливается в 1 для включения канала 2 звукового сопровождения.
D0 — устанавливается в 1 для включения канала 1 звукового сопровождения.

Игровой пульт
С приставкой DENDY можно использовать один или два игровых пульта. Для программиста работа с пультами сводится к формированию импульса, по которому происходит запись состояния кнопок пульта в сдвиговый регистр и последующее чтение данных из регистра.
Чтобы сохранить состояние кнопок пульта в сдвиговом регистре, необходимо записать сначала 1, а затем 0 по адресу 4 016h посредством приведенного фрагмента:
После выполнения данной программы в регистрах обоих пультов сохраняется состояние восьми кнопок. Теперь при каждом обращении по адресу 4016h для первого пульта и 4017h для второго по линии DO шины данных будут поступать сведения о состоянии кнопок (0 — не нажата; 1 — нажата) в следующем порядке: А, В, SELECT, START, UP, DOWN, LEFT, RIGHT.
Следовательно, процедура чтения состояния игрового пульта должна выглядеть так:
Joy_loop:
LDA 4016 ; Чтение состояния
; клавиши.
ROR ; Перенос разряда D0
; в флаг С.
TXA
ROL ; Добавление разряда.
; к результату.
TAX DEY
BNE Joy_loop ; В аккумуляторе байт состояния ; кнопок пульта.
RTS
Через специальный адаптер допустимо одновременное подключение четырех игровых пультов. В этом случае при последовательном чтении порта 4016h сначала передаются восемь бит состояния пульта 1, а затем восемь бит состояния пульта 3. Из порта 4017 h аналогичным образом считывается состояние пультов 2 и 4.
При работе с четырьмя пультами формировать синхроимпульс нужно только один раз, после чего будут считаны состояния всех пультов.
Световой пистолет
Световой пистолет подсоединяется к разъему игровой приставки DENDY вместо одного из пультов. С точки зрения программирования работа со световым пистолетом сводится к анализу двух разрядов в байте, считываемом из порта 4016h или 4017h.
Положение курка светового пистолета определяется анализом разряда D3: единица здесь сигнализирует о нажатии курка. Сигнал с фототранзистора влияет на разряд D4: если он засвечен, в этом разряде будет 0.
Порты вода/вывода
Система ввода/вывода игровой приставки DENDY состоит из двух портов с адресами 4016h и 4017h.
Регистр игрового порта 1
Адрес: 4016h.
Тип: запись/чтение.
Назначение разрядов:
D0 — при записи формируется стробирующий импульс для сохранения состояния пультов; при чтении определяется состояние пультов 1 и 3.
D3 — показывается состояние курка светового пистолета.
D4 — состояние фототранзистора светового пистолета.
Регистр игрового порта 2
Адрес: 4017h.
Тип: запись/чтение.
Назначение разрядов:
D0 — определяется состояние пультов 2 и 4.
D3 — показывается состояние курка светового пистолета.
D4 — отражается состояние фототранзистора светового пистолета.
10 интересных фактов о приставке Dendy из 90-х
Недавно я разбирал старые вещи и случайно нашел картридж от приставки Dendy. Я не мог поверить своим глазам, так с момента его последнего использования прошло не меньше 30 лет, и я думал, что у меня их давно нет. Нахлынули тёплые воспоминания из детства, из 90-х годов, когда в России начали массово появляться консольные приставки.
Это сейчас компьютерные игры настолько продвинутые, что иной раз сложно отличить скриншот из игры от реальной фотографии, в те времена игровые приставки не могли похвастаться выдающейся графикой, но от этого не переставали быть желанными всеми детьми той эпохи. Предлагаю вам вместе со мной вспомнить, как это было, если вы застали начало этой эпохи игровых консольных приставок 90-х. В этой статье я собрал для вас 10 интересных фактов о первой массовой приставке в России — Dendy, которые не все знают.
1. Прототипом Dendy была приставка третьего поколения Famicom, которую производила японская компания Nintendo Entertainment System (NES). Название Famicom образовано от фразы «семейный компьютер» (family computer). Если быть точнее, тайваньская компания TXC Corporations производила аналоги (клоны) японской Famicom под названием Micro Genius, которая и приехала в Россию под брендом «Dendy». За несколько лет существования в РФ у приставки было несклько модификаций Dendy Classic, Dendy Junior, Dendy Classic II и Dendy Junior II, Dendy Junior II P, Dendy Junior IV P.
Приставки Nintendo Famicom и Steepler Dendy Junior
2. Автором бренда Dendy является бизнесмен Виктор Савюк, который, работая в компании «Стиплер», реализовал идею импорта и продаж приставок Dendy на территории Российской Федерации. Он также является автором рекламных слоганов «Dendy — Новая Реальность» и «Волшебный мир видеоигр», автор идеи создания телевизионной передачи «Денди — Новая Реальность» и выпуска журнала «Видео-Асс Dendy». По задумке автора название приставки должно было отсылать к безупречному стилю и лоску во внешнем виде английских мужчин, которых называли Dandy. Однако, учитывая невысокий на тот момент уровень проникновения английского языка в России, было принято решение заменить букву «a» в названии на «e».
Без ложной скромности можно сказать, что Виктор Савюк если и не создал индустрию компьютерных игр в России с нуля, то стоял почти у самых её истоков и придал огромный импульс её развитию.
Виктор Авксентьевич Савюк
3. Приставка Dendy появилась в продаже 17 декабря 1992 года по цене 39 000 рублей (94 доллара США). Приставка сразу стала мега-популярной, продажи росли экспоненциально, в какой-то момент было принято решение прекратить рекламу, потому что спрос намного превышал предложение. К середине 90-х годов тем не менее рынок насытился, появились различные аналоги 8-битных приставок, а также на рынке уже начали появляться следующие поколения приставок, более мощные 16-битные модели, поэтому спрос на Dendy постепенно иссяк. Сегодня те самые приставки и картриджи к ним являются объектами коллекционирования.
Картриджи для 8-битных приставок эпохи 90-х годов
4. Один из самых узнаваемых рекламных образов того времени, слоненок Денди, был нарисован мультипликатором Иваном Максимовым . За работу Иван получил $1000.
В создании рекламного ролика принимали участие музыканты группы «Несчастный случай». Музыку для рекламного ролика написал клавишник Сергей Чекрыжов, а слоган «Dendy — играют все» придумал бас-гитарист Андрей Гуваков.
Мотогонщик на фотографии на коробке, которая запомнилась нам с детства — это испанский профессиональный мотогонщик Карлос Кардус, выступавший за команду Honda Repsol в классе MotoGP 250cc. В 1990 году он выиграл 4 гонки и занял второе место в чемпионате мира. Позднее в дизайне коробок использовались фотографии и других мотоциклистов.
Иван Максимов, слонёнок Dendy и коробка от приставки
5. Примечательно, что в рекламе Dendy не было ни слова свойствах и характеристиках самой продукции. Демонстрировался лишь мультяшный персонаж, телевизор и неизвестное техническое устройство (приставка). Реклама активно присутствовала в эфире в течение двух недель до старта продаж и породила массу слухов, люди даже напевали мелодию из рекламного ролика. Этот кейс можно смело считать одним из первых примеров вирусной рекламы на ТВ в РФ.
Кадр из телевизионной рекламы Dendy, 1991 год
6. Nintendo в те времена считала рынок РФ бесперспективным, поэтому серьезных планов выхода на рынок не имела. Однако после начавшегося в 1991 году бума консольных приставок, Nintendo пересмотрела свои приоритеты и по началу даже рассматривала возможность судебного преследования компании «Стиплер». Однако закон и обстоятельства были полностью на стороне российского импортёра. Вся продукция копировала уже существовавшие на азиатском рынке клоны компании Nintendo, а не саму приставку Nintendo Famicom, в приставках Dendy отсутствовали оригинальные компоненты Nintendo, да и с маркетинговой точки зрения претензии смотрелись бы беспочвенно: продукция Dendy была уже широко известна, а вот про японскую компанию Nintendo в то время знали только в узких кругах.
Впоследствии, когда руководством Nintendo было принято решение о полноценном присутствии на российском рынке, в партнёры была выбрана именно компания «Стиплер». Это произошло уже в период расцвета 16-битных консолей, поэтому былые претензии на тему «8-биток» были забыты. Сотрудничество, впрочем, было не слишком удачным и недолгим.
7. Не думайте, что клонирование японских приставок было исключительно российской прерогативой. Наоборот, Россия присоединилась к индустрии консольных приставок одной из последних. Япония и США развивались опережающими темпами, поэтому задавали тренды, а остальная часть мира догоняла и клонировала приставки. «Свои» 8-битки были практически в каждой стране. Ниже вспомнил самые известные примеры:
- Южная Корея — Supercom (Haitai), CPC-51B (Daewoo), Pascal Stereo (Yongtoys), Super Wonderboy (Sieco), Golden Boy (Daejin System)
- Индия — Samurai
- ЮАР — Entertainment system (Reggie’s)
- Тайланд — Family FR-202
- Польша — Pegasus (Кстати, производятся до сих пор), Batman AY-168AS
- Бразилия и страны Латинской Америки — Bit System, Geniecom, NASA, Milmar Top System, Top Game VG-9000 «Double system» (GCE), Dynavision (Dynacom )
- Аргентина — Family Game
- Арабские страны — Daryar
- Австралия — Spica IQ-701
- Китай — большое количество производителей, даже смысла нет перечислять
- Даже на Украине была «собственная» консоль — JIPPY. Это был очередной китайский клон NES Famicom, завозимый компанией «Атлантида». Правда проект долго не прожил, было завезено около 15000 шт., из которых 5000 ушло в Россию
На фотографиях ниже консольная приставка Little Player ABC-123 производства тайваньской Deguan. Это клон тайваньской же Micro Genius IQ-502 (TXC Corporations). Именно с этой приставки началось моё путешествие в мир компьютерных игр в детстве.
Моя первая 8-битка, Little Player ABC-123
8. Основная масса картриджей для приставок 90-х годов была китайского производства. Формально говоря, все эти картриджи на рынках и в магазинах характерного желтого цвета и характерной формы были пиратскими. Китайцы просто копировали дампы лицензионных игр и тиражировали их. Однако не многие знают, что были и картриджи отечественного производства. Они имели оригинальную форму, собственные микросхемы на коричневом текстолите (китайские картриджи были выполнены на зеленом текстолите) и содержали в основном те же игры, но дублированные на русский язык.
Производила их компания АО Электроника (та самая из СССР, которая копировала консоли Game & Watch от Nintendo. Да, да устройства с играми “Ну погоди!”, “Веселый повар”, “Авто-слалом”, “Космический мост” и другие (всего около 20-ти игр), не были придуманы в СССР, а были скопированы с японских оригиналов.
Картридж для 8-битной приставки от АО Электроника
9. Мало кто знает, но уже тогда в 90-е на обычной телевизионной приставке можно было поиграть в настоящие азартные игры. И речь не о «детском» казино, а о азартных играх с реальными деньгами. В то время гэмблинг никак законодательно не регулировался.
В картриджах игры был специальный слот, куда необходимо было вставлять пластиковую карту с баллами. Баллы использовались в игре, а карты приобретались в соответствующих магазинах. Выиграть, как вы понимаете было ничего невозможно, поэтому, покупая карту в магазине, вы прощались с деньгами навсегда. Игра называлась «Бонза».
Азартная игра Bonza для 8-битных приставок
10. В планах компании «Стиплер» был вывод на рынок самой мощной приставки в линейке 8-битко — Dendy Pro. Савюк описывал её газете «Коммерсант» как «новаторскую 8-битную приставку, качество которой не уступает японским аналогам». Выход консоли был запланирован на конец 1993 года. В качестве прототипа для приставки выступала Micro Genius IQ-1000 от той же TXC Corporations. Приставка имела один беспроводной джойстик и разъемы для наушников. Однако планам не суждено было сбыться, Dendy Pro так и не появилась на российском рынке. За всю историю существования Dendy было продано несколько миллионов приставок (от 2 до 6 миллионов по разным данным).
Игровая приставка Micro Genius IQ-1000
Это была отличная эпоха! Конечно, времена были сложными, впрочем, наверное, как и любые другие. В тот период наша страна проиграла холодную войну, СССР прекратил своё существование, новообразованные страны погрузились в эпоху первичного накопления капитала в условиях бандитского капитализма. Но мы тогда ничего этого не понимали, потому что были детьми. Мы познавали мир и играли в приставки. Поэтому, спасибо ещё раз той эпохе, какая бы она ни была, за наше тёплое ламповое детство!
Если помните интересные факты про приставки тех времен, пишите в комментариях, повспоминаем вместе! =)
