Технический обзор SEGA GENESIS [Автор неизвестен] (doc) читать онлайн

Книга в формате doc! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

Версия перевода – 1.5b



Технический обзор SEGA GENESIS





КОНФИДЕНЦИАЛЬНО


СОБСТВЕННОСТЬ SEGA










Отредактировано Nemesis – исправлены испорченные картинки


Переведено на русский и дополнено - HardWareMan
GENESIS:

68000 @8 MHz
• центральный процессор
• 1 Мбайт (8 Мбит) ROM (реально выделено 8 Мбайт, используется 4 Мбайта)
• 64 Кбайт RAM

VDP (Видеоконтроллер)
• специализированный видеоконтроллер
- управляет игровыми плоскостями и спрайтами
- поддерживает DMA
- прерывания по Кадрам и Строкам
• 64 Кбайта выделенной памяти (Видеобуфер)
• 64 ячейки на 9-бит CRAM (RAM цвета)

Z80 @4 MHz
• управляет PSG (программируемый генератор звука) и чипом FM синтезатора.
• 8 Кбайт собственной статической памяти (реально можно увеличить до 16 Кбайт заменой чипа)

Видео:

• Примечание: игровые плоскости и спрайты основаны на символах (тайлах)

• Область отображения информации

- 40 символов в ширину и 28 символов в высоту
• каждый символ 8 x 8 точек
• разрешение экрана = 320 x 224 точки

- 3 Плана
• 2 прокручиваемых плоскости
• 1 план спрайтов
• настраиваемые приоритеты отображения между планами

- Игровые плоскости:
• 6 разных размеров
• 1 плоскость может иметь «фиксированное» окно
• карта плоскости
- каждый символьная позиция занимает 2 байта, где хранится:
• номер символа в знакогенераторе (10 бит); указывает на символ в таблице символов
• зеркало по горизонтали
• зеркало по вертикали
• палитра цвета (2 бита); индекс в памяти цвета (CRAM)
• приоритет
• прокрутка:
- шаг прокрутки в 1 точку
- горизонтальная:
• плоскость целиком
• каждую строку символов
• каждую строку точек
- вертикальная:
• плоскость целиком
• столбик в 2 символа

- Спрайты:
• от 1 x 1 символа до 4 x 4 символов
• можно определять до 80 спрайтов
• показывать до 20 спрайтов на строку точек
• приоритеты спрайтов

- Характеристики символа (тайла)
• цвет в 4 бита на точку; указатель на регистр цвета
• 4 байта на строку из 1 точки
• 32 на прорисовка всего символа
• общий знакогенератор для плоскости и спрайтов!

Цвет:

- Используется CRAM (часть VDP)
• 64 ячейки в 9-бит
- 64 цвета из 512 возможных
• 3 бита на Красный
• 3 бита на Зеленый
• 3 бита на Синий
• 4 палитры в 16 цветов
- “0”-ой цвет (каждой палитры) всегда прозрачный

Разное:

- DMA (прямой доступ к памяти)
• использует Шины пока 68К занят выполнением команды
• может переслать 205 байт за 1 строку (телевизионную) во время VBLANK (кадровое гашение)
- за время VBLANK (кадровое гашение) проходит 36 строк
- DMA может переслать 7380 байт за весь VBLANK

- прерывания по кадрам и строкам

Звук:

- Z80 управляет:
• PSG (чип TI 76489)
• чип FM (Yamaha YM 2612)
- 6-канальный, стерео
• Z80 может использовать ROM картриджа
• 8 Кбайт RAM

Железо:

- 2 пульта управления
• джойстики
• 3/6 кнопок
• кнопки направления, кнопки “A”, “B”, “C” и “Start” для 3-х кнопочного
• кнопки направления, кнопки “A”, “B”, “C” ,“Start”, “X”, “Y”, “Z” и “Mode” для 6-х кнопочного
- 1 внешний порт (такой же как и порт джойстика, в MD2 и поздних выпусках MD1 убран)
- 2 видеовыхода: ВЧ (PAL) и RGB (только в MD1. В MD2 RGB и ПЦТС (PAL). ВЧ формируется отдельно)
- разъем для стереонаушников (только в MD1)
- управление громкостью для наушников (только в MD1)

******* СОДЕРЖАНИЕ *******

1. КАРТА ПАМЯТИ -


§ 1 16-ти битный режим MEGA DRIVE -

_ Карта памяти 68000 -
_ Карта памяти Z80 -
_ Доступ 68000 к памяти Z80 -
_ Область I/O (портов ввода/вывода) -
_ Область управления -
_ Область VDP (видеоконтроллера) -

2. VDP 315-5313 (TA-06) -
(видеоконтроллер)

_ Терминология -

§ 1 Спецификация экрана -

§ 2 Структура VDP -
_ CTRL (управление) -
_ VRAM (видеобуфер) -
_ CRAM (память цвета) -
_ VSRAM (память прокрутки по вертикали) -
_ DMA (контроллер прямого доступа к памяти) -

§ 3 Прерывания -
_ Прерывание по кадрам -
_ Прерывание по строкам -
_ Прерывание от внешних портов -

§ 4 Интерфейс VDP -
_ $C00000 (Канал данных) -
_ $C00004 (Канал управления) -
_ $C00008 (Счетчик X/Y) -

§ 5 Внутренние регистры VDP -
Регистр №0 - Регистр №3 -
Регистр №4 - Регистр №10 -
Регистр №11 - Регистр №14 -
Регистр №15 - Регистр №18 -
Регистр №19 - Регистр №23 -

§ 6 Доступ к памяти VDP -
_ Установки адресации -
_ Доступ к VRAM (видеобуфер) -
_ Доступ к CRAM (память цвета) -
_ Доступ к VSRAM (память прокрутки) -
_ Временные интервалы доступа -
_ Счетчик X/Y -

§ 7 DMA -
_ Из памяти в видеобуфер -
_ Заполнение видеобуфера -
_ Копирование видеобуфера -
_ Возможности DMA -

§ 8 Прокрутка -
_ Размер экрана -
_ Горизонтальная прокрутка -
_ Вертикальная прокрутка -
_ Прокрутка блока -
_ Имя блока -
§ 9 Окно -
_ Позиция -
_ Приоритет -
_ Имя блока -

§ 10 Спрайт -
_ Позиция -
_ Атрибуты -
_ Размер -
_ Возможности -
_ Приоритет (Спрайтов) -
_ Знакогенератор -

§ 11 Приоритет -

§ 12 Палитра цвета -

§ 13 Чересстрочный режим -

3. Совместимость 8/16 бит -

_ MARK III (MS - Япония) -
_ MS -
_ карта RAM -

4. Порты I/O (ввода/вывода) -

§ 1 Версия -

§ 2 Порты I/O -

§ 3 Режим памяти -

§ 4 Управление процессором Z80 -
_ Захват шин Z80 (BUSREQ) -
_ Сброс Z80 (RESET) -

§ 5 Область Z80 -
_ Память для программы Z80 -
_ Звуковой чип -
_ Регистр переключения банков -

5. Карта VRAM (видеобуфера) -
6. Приложения -
1. Карта памяти

§ 1 16-ти битный режим MEGA DRIVE (отличается от режима совместимости с MASTER SYSTEM)

_ Карта памяти 68K _



• От переводчика:
• Адреса с $400000 по $7FFFFF – фантом ПЗУ картриджа (ROM) и могут использоваться для ROM. На реальной
приставке, сигнал CS для РОМа вырабатывается при обращении во всей области от $000000 до $7FFFFF.
• Адреса с $A13000 по $A130FF – обращение к порту #1. При обращении к этой области в 256 байт, происходит
генерация сигнала CS на контакт A31 разъема картриджа.
• Адреса с $A12000 по $A120FF – обращение к порту #2. При обращении к этой области в 256 байт, происходит
генерация сигнала CS на контакт B7 разъема Sega CD.
• Адреса с $E00000 по $FFFFFF отведены под ОЗУ (RAM). В стандартной конфигурации там повторяется
блок в 64 Кб. Практически ОЗУ можно нарастить до 2 Мбайт.
• В стандартной конфигурации MD1 и MD2 при обращении к адресам $800000-$9FFFFF и $A12000-$BFFFFF
(кроме указанных выше) процессор 68К останавливается. Он ожидает готовности устройства (“-DTACK” 10
ножка). Продолжает работу только после сброса. Это следует учесть при разработке устройств на основе платы
MD1 или MD2


_ Карта памяти Z80 _




• От переводчика:
• Адреса с $2000 по $3FFF – фантом ОЗУ для программы Z80. При замене микросхемы статической памяти
8 Кбайт на 16 Кбайт, область с $0000 по $3FFF (16 Кбайт) может быть использована целиком.
• Доступ к банку памяти 68К происходит за счет автоматического арбитража шин (т.е. не требует дополнительных
действий, просто читать ячейку или писать) в отличие от доступа 68К к памяти Z80.


_ Доступ 68000 к памяти Z80 _

• Доступ к памяти Z80 происходит за счет программного арбитража (необходимо засинхронизироваться
с Z80, подробнее смотрите ниже) по адресам с $A00000 по $A0FFFF (64 Кбайта)
• При обращении к адресам Z80 с $8000 по $FFFF ($A08000 - $A0FFFF) происходит чтение пассивной шины.



_ Область портов I/O (ввода/вывода) _




_ Область управления _


_ Область VDP (видеоконтроллера) _



2. VDP 315 – 5313 (TA-06)
(Видеоконтроллер)
Видеоконтроллер управляет изображением. VDP имеет графические режимы IV и V. Режим IV для совместимости с MASTER SYSTEM и V для новых функций Mega drive. Нет преимуществ для использования режима IV. Поэтому все разработчики используют режим V. В режиме V VDP показывает 4 плоскости (плана): Спрайты, Плоскость A, Плоскость B, Окно и Фон.

Режим IV (Режим совместимости)



Режим V (16-ти битный режим)



_ Терминология _

1. Предмет на позиции с координатами X Y называется "DOT" (“Указатель”).
2. Минимальная единица экрана называется "PIXEL" (“Точка”).
3. "CELL" (“Ячейка”) подразумевается символ 8 x 8 точек.
4. SCROLL (Прокрутка) отображает перемещение охватываемой области плоскости.
5. CPU (Процессор) обычно применяется для 68000.
6. VDP (Видеоконтроллер) означает “Video Display Processor”.
7. CTRL (Управление) обозначает “Control”.
8. VRAM (Видеобуфер) обозначает ОЗУ VDP, 64Kбайта ОЗУ с доступом только через регистры VDP.
9. CRAM (Память цвета) обозначает “Color RAM”, 64 ячейки по 9 бит внутри чипа VDP.
10. VSRAM (Память прокрутки) обозначает “vertical Scroll RAM”. 40 ячеек по 1O бит внутри чипа VDP.
11. DMA (Котроллер прямого доступа к памяти) обозначает “Direct Memory Access”, позволяет чипу VDP
быстро заполнить или скопировать участок памяти.
12. PSG (Программируемый генератор звука) означает “Programmable sound Generator”. Класс звуковых чипов с
небольшими возможностями. Mega drive содержит чип 76489 от Texas Instruments.
13. FM (Частотная модуляция) означает “Frequency Modulation”, класс звуковых чипов с большими
возможностями. Mega drive содержит чип Yamaha 2612 FM .
§ 1 Спецификация экрана

Сводная таблица

РАЗМЕР
ЭКРАНА
ДОСТУПНЫ ДВА РЕЖИМА:
32*28 символа (“CELL”) (256*224 точки)
40*28 символа (“CELL”) (320*224 точки)
ЗНАКОГЕНЕРАТОР
СИМВОЛЫ 8*8 (“CELLS”) 1300-1800 зависит от общей системной конфигурации.
ПРОКРУТКА
ПЛОСКОСТЕЙ
Две прокручиваемой плоскости. Размер в символах;
32*32, 32*64, 32*128,
64*32, 64*64, 128*32
СПРАЙТЫ
Размеры спрайтов задаются программно. Возможны следующие варианты.
8*8, 8*16, 8*24, 8*32
16*8, 16*16, 16*24, 16*32
24*8, 24*16, 24*24, 24*32
32*8, 32*16, 32*24, 32*32
Доступны 64 Спрайта в режиме 32 символов по горизонтали и 80 Спрайтов в режиме 40 символов по горизонтали.
ОКНО
1 окно, связанное с плоскостью A.
ЦВЕТ
64 цвета из 512 возможных

Для PAL (Европейский телевизионный стандарт 50Hz), вертикальный размер составляет
30 символов (240 точек).
VDP поддерживает оба стандарта: NTSC и PAL. В обоих случаях, экран делится на активное окно,
где показывается картинка, и кадровый обратный ход (кадровое гашение) где монитор подготавливается
к следующему кадру.


Таблица состава растра:


Строк в экране
В столбце символов
Строк
(Отображение)
Строк
(Обратный ход)
NTSC
262
28
224
38
PAL
312
28
224
98
PAL
312
30
240
82

§2 Внутреннее строение VDP

CPU управляет VDP через порты в адресном пространстве.

_ CTRL (Управление) _
Управляет REGISTER, VRAM, CRAM, VSRAM, DMA DISPLAY, и т.д.

_ VRAM (Видеобуфер VDP) _
Основное хранилище отображаемых данных.

_ CRAM (ОЗУ цвета) _
64 цвета разделено на 4 палитры по 16 цветов каждая.

_ VSRAM (ОЗУ вертикальной прокрутки) _
До 20 разных значений вертикальной прокрутки на каждую плоскость: A и B.

_ DMA (Прямой доступ к памяти) _
VDP может перемещать данные на большой скорости из ОЗУ процессора в видеобуфер, ОЗУ цвета,
и ОЗУ вертикальной прокрутки без участия CPU, захватывая шины 68000 когда он занят выполнением
команды.

VDP может еще и заполнять видеобуфер константой или копировать фрагмент внутри видеобуфера
без участия 68000.


§ 3 ПРЕРЫВАНИЯ

Есть три аппаратных прерывания: Кадровое, Строчное и Внешнее (от портов ввода/вывода).
Можно управлять каждым через биты lEO, IE1 и IE2 в регистрах VDP. Прерывания используют
метод автоматического формирования вектора (AUTO-VECTOR) из таблицы векторов 68000
и имеют уровни приоритетов 6, 4 и 2 из 7 возможных. Уровень 6 закреплен за Кадровым прерыванием
и имеет максимальный приоритет.

lEO Кадровое прерывание - Уровень приоритета 6 (Максимальный)
IE1 Строчное прерывание - Уровень приоритета 4 (Средний)
IE2 Внешнее прерывание - Уровень приоритета 2 (Минимальный)
1 : Разрешен
0 : Запрещен

• От переводчика:
• Процессор 68К имеет встроенный контроллер прерываний на 7 уровней. Есть регистр маски прерываний.
Маской задается номер приоритета (7..1) и прерывания с номером меньше маски не проходят. Уровень
7 запретить нельзя. Используются только уровни 2, 4 и 6.

_ Кадровое прерывание (V-INT) _
Кадровое прерывание приходит сразу после начала кадрового обратного хода.


_ СТРОЧНОЕ ПРЕРЫВАНИЕ (H-INT) _
Строчное прерывание приходит сразу после начала строчного обратного хода.


VDP загружает отображаемую информация, включая все требуемые значения регистров, для строки экрана
за 36 тактов CPU, в это время CPU может управлять параметрами отображения следующей строки, а не
той, где произошло прерывание

Горизонтальное прерывание контролируется счетчиком строк в регистре #10. Если изменять значение счетчика
каждую строку, то можно получить любой период строчных прерываний.

Например: Если регистр #10 равен 00h, тогда прерывания происходят каждую строку.
Если регистр #10 равен O1h, тогда прерывания происходят каждую вторую строку.
Если регистр #10 равен O2h, тогда прерывания происходят каждую третью строку.
И т.д.
_ ВНЕШНЕЕ ПРЕРЫВАНИЕ (EX-INT) _

Внешнее прерывание формируется устройством периферии (световой пистолет, модем) и останавливает счетчик для дальнейшей обработки процессором.





Для инициализации Внешнего прерывания, а так же для установки Кадрового и Строчного смотрите
ниже по документу.

§ 4 ПОРТЫ VDP

Порты VDP находятся в адресном пространстве 68000.

Адрес
Старший байт
Младший байт
$C00000
Порт данных
$C00002
Порт данных
$C00004
Порт управления
$C00006
Порт управления
$C00008
Счетчик координат луча
$C0000A
Запрещено
$C0000C
Запрещено
$C0000E
Запрещено
$C00010
Запрещено
PSG


_ $ C00000 (ПОРТ ДАННЫХ) _

ЧТЕНИЕ/ЗАПИСЬ: VRAM, VSRAM, CRAM



D7
D6
D5
D4
D3
D2
D1
D0

$C00000
1 байт
DT15
DT14
DT13
DT12
DT11
DT10
DT9
DT8
D15 – D8

2 байт
DT7
DT6
DT5
DT4
DT3
DT2
DT1
DT0
D7 – D0

• Порты $C00000 и $C00002 полностью одинаковы
• При записи в порт $C0000 слова (WORD), биты DT15-DT0 соответствуют битам записываемых данных.

_ $ C00004 (ПОРТ УПРАВЛЕНИЯ) _

ЧТЕНИЕ: РЕГИСТР СТАТУСА



D7
D6
D5
D4
D3
D2
D1
D0

$C00004
1 байт
*
*
*
*
*
*
EMPTY
FULL
D15 – D8

2 байт
F
SOVR
C
ODD
VB
HB
DMA
PAL
D7 – D0


D7
D6
D5
D4
D3
D2
D1
D0

$C00004
1 байт
*
*
*
*
*
*
EMPTY
FULL
D15 – D8

2 байт
F
SOVR
C
ODD
VB
HB
DMA
PAL
D7 – D0

* Не используются

EMPTY 1 : Буфер FIFO для записи пуст
0 :
FULL 1 : Буфер FIFO для записи полон
0:
F 1 : Произошло Кадровое прерывание
SOVR 1 : Переполнение спрайтов, слишком много на одну строку (экрана)
Более 17 в режиме 32 символа.
Более 21 в режиме 40 символов.
C 1 : Пересечение пикселей двух спрайтов с цветом не 0.
0 :
ODD 1 : Нечетный кадр изображения в чересстрочном режиме.
0 : Четный кадр изображения в чересстрочном режиме.
VB 1 : Происходит Кадровое гашение
0 :
HB 1 : Происходит Строчное гашение
0 :
DMA 1 : DMA занят
0 :
PAL 1 : Режим PAL
0 : Режим NTSC
ПЕРВЫЙ ВАРИАНТ ЗАПИСИ : УСТАНОВКА РЕГИСТРА



D7
D6
D5
D4
D3
D2
D1
D0

$C00004
1 байт
1
0
0
RS4
RS3
RS2
RS1
RS0
D15 – D8

2 байт
D7
D6
D5
D4
D3
D2
D1
D0
D7 – D0

• Порты $C00000 и $C00002 полностью одинаковы
• RS4 ~ RS0 : Номер внутреннего регистра.
• D7 ~ D0 : Данные для регистра

• При записи можно использовать запись двух слов (WORD, 16 бит) или 1 запись длинного слова (LONG WORD, 32 бита). При записи длинного слова первыми записываются биты D31 – D16, затем биты D15-D0.

ВТОРОЙ ВАРИАНТ ЗАПИСИ : УСТАНОВКА АДРЕСА



D7
D6
D5
D4
D3
D2
D1
D0

1 слово
1 байт
CD1
CD0
A13
A12
A11
A10
A9
A8
D15 – D8
$C00004
2 байт
A7
A6
A5
A4
A3
A2
A1
A0
D7 – D0
2 слово
1 байт
0
0
0
0
0
0
0
0
D15 – D8
$C00004
2 байт
CD5
CD4
CD3
CD2
0
0
A15
A14
D7 – D0

• CD5 ~ CD0 : код ID
• A15 ~ A0 : адрес назначения ОЗУ

РЕЖИМ ДОСТУПА
CD5
CD4
CD3
CD2
CD1
CD0
ЗАПИСЬ В VRAME
0
0
0
0
0
1
ЗАПИСЬ В CRAM
0
0
0
0
1
1
ЗАПИСЬ В VSRAM
0
0
0
1
0
1
ЧТЕНИЕ ИЗ VRAM
0
0
0
0
0
0
ЧТЕНИЕ ИЗ CRAM
0
0
1
0
0
0
ЧТЕНИЕ ИЗ VSRAM
0
0
0
1
0
0


• Для использования этой возможности нужно использовать либо две записи по 16 бит или одну запись на 32 бита.

• От переводчика:
• При использовании первого варианта использовать только 16 бит (1 слово “WORD”), при использовании второго
варианта использовать только 32 бита (2 слова “WORD” или 1 длинное слово “LONG WORD”). При записи
длинного слова, биты D31-D16 записываются первым словом, а биты D15-D0 вторым.
• VDP определяет какой тип записи используется по комбинации битов CD1 и CD0. Если комбинация такая:
CD1=1 и CD0=0 то это первый вариант, при других комбинациях (см. таблицу) применяется второй вариант.
• Внимание! Код ID CD5 используется при инициализации и запуска сервиса DMA. При этом дополнительной
информации обо всех вариантах кода ID нет. Будьте внимательны, в примерах указаны нормальные значения.

_ $ C00008 (СЧЕТЧИК КООРДИНАТ ЛУЧА) _

НЕ ЧЕРЕЗСТРОЧНЫЙ РЕЖИМ



D7
D6
D5
D4
D3
D2
D1
D0

$C00008
1 байт
VC7
VC6
VC5
VC4
VC3
VC2
VC1
VC0
D15 – D8

2 байт
HC8
HC7
HC6
HC5
HC4
HC3
HC2
HC1
D7 – D0


ЧЕРЕЗСТРОЧНЫЙ РЕЖИМ



D7
D6
D5
D4
D3
D2
D1
D0

$C00008
1 байт
VC7
VC6
VC5
VC4
VC3
VC2
VC1
VC8
D15 – D8

2 байт
HC8
HC7
HC6
HC5
HC4
HC3
HC2
HC1
D7 – D0


HC8 ~ HC1 : Счетчик координаты X
VC8 ~ VC0 : Счетчик координаты Y
• От переводчика:
• Счетчик координат возвращает координаты (X/Y) выводимой в данный момент точки экрана (растра).
• В чересстрочном режиме младший бит координаты Y надо брать в регистре статуса (ODD).

§ 4 РЕГИСТРЫ VDP

VDP имеет для записи регистры от #0 до #23 и для чтения все 25 регистров. Есть 2 режима для установок регистров. Один режим 4 (IV) и один режим 5 (V). Здесь пойдет речь о режиме 5, о режиме 4 смотрите секцию “MARK”. Если менять режим во время кадра, то можно получить разные эффекты.

РЕГИСТР РЕЖИМА №1


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №0
0
0
0
IE1
0
1
M3
0

IE1 1 : Включает Строчное прерывание (уровень 4 для 68000)
0: Отключает Строчное прерывание (см. регистр №10)
M3 1 : Останов счетчика координат (X/Y).
0: Включает счетчик координат (X/Y)

РЕГИСТР РЕЖИМА №2


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №1
0
DISP
IE0
M1
M2
1
0
0

DISP 1 : Включает отображение (картинка на экране)
0 : Отключает отображение (экран черный)
IE0 1 : Включает Кадровое прерывание (уровень 6 для 68000)
0 : Отключает Кадровое прерывание
M1 1 : DMA включен
0 : DMA выключен
M2 1 : Размер по вертикали 30 символов (режим PAL)
0 : Размер по вертикали 28 символов (режим PAL, в режиме NTSC всегда 0)

БАЗОВЫЙ АДРЕС ПЛОСКОСТИ A


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №2
0
0
SA15
SA14
SA13
0
0
0

VRAM АДРЕС $XXX0_0000_0000_0000

БАЗОВЫЙ АДРЕС ДЛЯ ОКНА


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №3
0
0
WD15
WD14
WD13
WD12
WD11
0

WD11 должен быть 0 в режиме 40 символов по горизонтали
VRAM АДРЕС $XXXX_X000_0000_0000 (режим 32 символов по горизонтали)
VRAM АДРЕС $XXXX_0000_0000_0000 (режим 40 символов по горизонтали)
БАЗОВЫЙ АДРЕС ПЛОСКОСТИ B


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №4
0
0
0
0
0
SB15
SB14
SB13

VRAM АДРЕС $XXX0_0000_0000_0000

БАЗОВЫЙ АДРЕС АТРИБУТОВ СПРАЙТОВ


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №5
0
AT15
AT14
AT13
AT12
AT11
AT10
AT9

AT9 должен быть 0 при режиме 40 символов в строке
VRAM АДРЕС $XXXX_XXX0_0000_0000 (32 символа в строке)
VRAM АДРЕС $XXXX_XX00_0000_0000 (40 символов в строке)

РЕГИСТР НЕ ИСПОЛЬЗУЕТСЯ


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №6
0
0
0
0
0
0
0
0

ФОНОВЫЙ ЦВЕТ


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №7
0
0
CPT1
CPT0
COL3
COL2
COL1
COL0

CPT1,0 : ПАЛИТРА ЦВЕТА
COL3~0 : КОД ЦВЕТА

РЕГИСТР НЕ ИСПОЛЬЗУЕТСЯ


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №8
0
0
0
0
0
0
0
0

РЕГИСТР НЕ ИСПОЛЬЗУЕТСЯ


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №9
0
0
0
0
0
0
0
0

РЕГИСТР СТРОЧНОГО ПРЕРЫВАНИЯ


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №10
BIT7
BIT6
BIT5
BIT4
BIT3
BIT2
BIT1
BIT0

Этот регистр используется для указания периода Строчного прерывания (с шагом в 1 строку)
Строчное прерывание разрешается битом IE=1 (в регистре режима №1)

• От переводчика:
• Регистр задает количество пропущенных строк до следующего прерывания (0 – каждая строка,
1 – каждая вторая и т.д.).
РЕГИСТР РЕЖИМА №3


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №11
0
0
0
0
IE2
VSCR
HSCR
LSCR

IE2 1 : Разрешает Внешнее прерывание (уровень 2 для 68000)
0 : Запрещает Внешнее прерывание
* Смотрите Прерывания и системные порты ввода/вывода
VSCR: режим вертикальной прокрутки HSCR, LSCR: режим горизонтальной прокрутки
VSCR
ФУНКЦИЯ

HSCR
LSCR
ФУНКЦИЯ
0
ПОЛНАЯ ПРОКРУТКА

0
0
ПОЛНАЯ ПРОКРУТКА
1
КАЖДЫЕ 2 СИМВОЛА

0
1
ЗАПРЕЩЕНО



1
0
КАЖДЫЙ СИМВОЛ



1
1
КАЖДУЮ СТРОКУ ТОЧЕК

* ДЛЯ ОБОИХ ПЛОСКОСТЕЙ A И B

РЕГИСТР РЕЖИМА №4


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №12
RS0
0
0
0
S/TE
LSM1
LSM0
RS1

RS0 0 : Режим 32 символа в строке
1 : Режим 40 символов в строке
RS1 0 : Режим 32 символа в строке
1 : Режим 40 символов в строке
* RS0 и RS1 должны иметь одинаковые значения.
32 символа 0000_XXX0
40 символа 1000_XXX1
S/TE 1 : Разрешает SHADOW (тень) и HIGHLIGHT (подсветку).
0 : Запрещает SHADOW (тень) и HIGHLIGHT (подсветку).
LSM1, LSM0 : установка чересстрочного режима

LSM1
LSM0
ФУНКЦИЯ
0
0
НЕ ЧЕРЕЗСТРОЧНЫЙ
0
1
ЧЕРЕЗСТРОЧНЫЙ
1
0
ЗАПРЕЩЕНО
1
1
ЧЕРЕЗСТРОЧНЫЙ (2x разрешение)

БАЗОВЫЙ АДРЕС ТАБЛИЦЫ ГОРИЗОНТАЛЬОЙ ПРОКРУТКИ


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №13
0
0
HS15
HS14
HS13
HS12
HS11
HS10

VRAM АДРЕС $XXXX_XX00_0000_0000

РЕГИСТР НЕ ИСПОЛЬЗУЕТСЯ


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №14
0
0
0
0
0
0
0
0

АВТОМАТИЧЕСКОЕ УВЕЛИЧЕНИЕ АДРЕСА
Этот регистр настраивает автоматическое увеличение адреса при доступе к ОЗУ.


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №15
INC7
INC6
INC5
INC4
INC3
INC2
INC1
INC0

INC7~0 : Число увеличения (0~$FF)
На это число увеличится счетчик адреса при каждом обращении к ОЗУ.

• От переводчика:
• Регистр задает число, на которое увеличится счетчик адреса. Если число равно 0, то счетчик адреса
не изменится. Для последовательного обращения необходимо занести число 1. Но при заполнении
знакогенератора удобнее пользоваться словами (WORD), потому, что символы хранятся в ПЗУ (ROM)
картриджа, а архитектура приставки не позволяет обращаться к ПЗУ (ROM) побайтно. Поэтому можно
перебрасывать информацию из ПЗУ (ROM) в VRAM (Видеобуфер) словами (WORD). Число регистра
автоматического увеличения адреса при этом должно быть равно 2.
• Регистр действует на все типы ОЗУ: VRAM (видеобуфер), CRAM (ОЗУ цвета), VSRAM (ОЗУ прокрутки) и т.д.

РАЗМЕР ПРОКРУТКИ


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №16
0
0
VSZ1
VSZ0
0
0
HSZ1
HSZ0


VSZ1
VSZ0
ФУНКЦИЯ

HSZ1
HSZ0
ФУНКЦИЯ
0
0
32 символа в высоту

0
0
32 символа в ширину
0
1
64 символа в высоту

0
1
64 символа в ширину
1
0
ЗАПРЕЩЕНО

1
0
ЗАПРЕЩЕНО
1
1
128 символов в высоту

1
1
128символов в ширину

* ДЛЯ ОБОИХ ПЛОСКОСТЕЙ A И B

ПОЗИЦИЯ ОКНА ПО ГОРИЗОНТАЛИ


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №17
RIGHT
0
0
WHP5
WHP4
WHP3
WHP2
WHP1

RIGHT 0 : Окно с левой стороны от базовой точки.
1 : Окно с правой стороны от базовой точки.
WHP5 ~ 1 Базовая точка по горизонтали 0=Слева;
1=1 символ вправо;
2=2 символа вправо; и т.д.

ПОЗИЦИЯ ОКНА ПО ВЕРТИКАЛИ


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №18
DOWN
0
0
WVP4
WVP3
WVP2
WVP1
WVP0

DOWN 0 : Окно сверху от базовой точки.
1 : Окно снизу от базовой точки.
WVP4 ~ 0 Базовая точка по вертикали 0=Вверху;
1=1 символ вниз;
2=2 символа вниз; и т.д.
МЛАДШИЙ БАЙТ СЧЕТЧИКА DMA


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №19
LG7
LG6
LG5
LG4
LG3
LG2
LG1
LG0

СТАРШИЙ БАЙТ СЧЕТЧИКА DMA


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №20
LG15
LG14
LG13
LG12
LG11
LG10
LG9
LG8

LG15~0 : СЧЕТЧИК DMA

• От переводчика:
• Счетчик DMA задает размер пересылаемой (копируемой) области памяти.
• Значение LG0 – LG15 указывает на количество слов (WORD), т.е. если надо переместить с помощью DMA 256 байт,
число LG должно быть равно 128.

МЛАДШИЙ БАЙТ АДРЕСА ОРИГИНАЛА DMA


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №21
SA8
SA7
SA6
SA5
SA4
SA3
SA2
SA1

СРЕДНИЙ БАЙТ АДРЕСА ОРИГИНАЛА DMA


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №22
SA16
SA15
SA14
SA13
SA12
SA11
SA10
SA9

СТАРШИЙ БАЙТ АДРЕСА ОРИГИНАЛА DMA


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №23
DMD1
DMD0
SA22
SA21
SA20
SA19
SA18
SA17

SA22~1 : Адрес оригинала DMA
DMD1, 0 : Режим DMA

DMD1
DMD0
ФУНКЦИЯ
0
SA23
ИЗ ПАМЯТИ В VRAM
1
0
ЗАПОЛНЕНИЕ VRAM
1
1
КОПИРОВАНИЕ VRAM

• От переводчика:
• При инициализации сервиса DMA, необходимо задать размер копируемой/заполняемой области в словах (WORD).
Затем записывается адрес источника и режим. ВАЖНО! Запись адреса начинается с младшего адреса (Регистр №21),
затем записывается средний байт адреса (Регистр №22) а последним записывается старший байт адреса и
режим работы (Регистр №23). Последним записывается адрес приемника. DMA начинает работу сразу после
записи адреса приемника. Кроме того, команда записи в регистр № 23 и адреса приемника должны находится во
внутреннем ОЗУ приставки (Адреса $FF0000 - $FFFFFF). Более подробно о сервисе DMA смотрите ниже.
• Как показала практика, иногда программа инициализации DMA работает и в ПЗУ. Видимо дело в выравнивании команд
процессора М68000 по четным и кратным адресам. Это связано с тем, что из-за особенностей схемы приставки
М68000 может читать из ПЗУ только словами (WORD).

§ 6 ДОСТУП К ПАМЯТИ VDP

_ УСТАНОВКИ АДРЕСАЦИИ ОЗУ _

Вы можете получить доступ к VRAM, CRAM и VSRAM после записи длинного слова (32 бита) управления
по адресу $C00004 или $C00006.

Можно использовать два слова (WORD) или одно длинное слово (LONG WORD) при установке адреса.
Если используется длинное слово, то биты D31 - D16 записываются первыми, затем биты D15 - D0.



D7
D6
D5
D4
D3
D2
D1
D0

1 слово
1 байт
CD1
CD0
A13
A12
A11
A10
A9
A8
D15 – D8
$C00004
2 байт
A7
A6
A5
A4
A3
A2
A1
A0
D7 – D0
2 слово
1 байт
0
0
0
0
0
0
0
0
D15 – D8
$C00004
2 байт
CD5
CD4
CD3
CD2
0
0
A15
A14
D7 – D0

CD5~CD0 : Код ID
A15~A0 : Адрес назначения в ОЗУ



CD5
CD4
CD3
CD2
CD1
CD0
ЗАПИСЬ В VRAM
0
0
0
0
0
1
ЗАПИСЬ В CRAM
0
0
0
0
1
1
ЗАПИСЬ В VSRAM
0
0
0
1
0
1
ЧТЕНИЕ ИЗ VRAM
0
0
0
0
0
0
ЧТЕНИЕ ИЗ CRAM
0
0
1
0
0
0
ЧТЕНИЕ ИЗ VSRAM
0
0
0
1
0
0

• От переводчика:
• Для ускорения доступа, можно задать только начальный адрес ОЗУ VDP. А потом можно просто обращаться
к регистру данных VDP, правда, перед этим нужно инициализировать счетчик автоматического увеличения
адреса.
_ ДОСТУП К VRAM (ВИДЕОБУФЕР) _

Объем VRAM всего 64 Кбайт, поэтому адрес занимает 16 бит и имеет состояния от 0 до $FFFF. Доступ
к VRAM можно получить следующим образом:


D7
D6
D5
D4
D3
D2
D1
D0

1 слово
1 байт
0
1
A13
A12
A11
A10
A9
A8
D15 – D8
$C00004
2 байт
A7
A6
A5
A4
A3
A2
A1
A0
D7 – D0
2 слово
1 байт
0
0
0
0
0
0
0
0
D15 – D8
$C00004
2 байт
0
0
0
0
0
0
A15
A14
D7 – D0
Данные
1 байт
DT15
DT14
DT13
DT12
DT11
DT10
DT9
DT8
D15 – D8
$C00000
2 байт
DT7
DT6
DT5
DT4
DT3
DT2
DT1
DT0
D7 – D0

A15~A0 : Адрес VRAM
D15~D0 : Данные VRAM

При использовании длинного слова (LONG WORD) биты D31 ~ D16 записываются первыми, затем D15 ~ D0.
Если используете запись байта, данные D7 ~ D0, и могут быть записаны в $C00000 или $C00001.
Адрес VRAM увеличится на число в регистре № 15 независимо от размера данных (8/16 бит).
Адрес A0 у VRAM используется для расчета увеличения адреса, но игнорируется при декодировании.

Адресация и декодирование адреса VRAM:
адрес VRAM декодируется, используя A15 ~ A1, и A0 определяет формат записи данных. Записываемые данные
не могут перекрыть границу слова (WORD, 16 бит). Младший и старший байты обменяются местами, если A0=1.


При A0=0
Адрес
Байт
Слово
Двойное слово

нечетный
D7 ~ D0
D15 ~ D8
D31 ~ D24

четный

D7 ~ D0
D23 ~ D16

нечетный


D15 ~ D8

четный


D7 ~ D0

При A0=1
Адрес
Байт
Слово
Двойное слово

нечетный
D7 ~ D0
D7 ~ D0
D23 ~ D16

четный

D15 ~ D8
D31 ~ D24

нечетный


D7 ~ D0

четный


D15 ~ D8


(ПРИМЕР)
СТАРТОВЫЙ АДРЕС: 0 Регистр #15=2

Адрес
Байт
Слово
Двойное слово
0
1-ый D7 ~ D0
1-ое D15 ~ D8
1-ое D31 ~ D24
1

D7 ~ D0
D23 ~ D16
2
2-ой D7 ~ D0
2-ое D15 ~ D8
D15 ~ D8
3

D7 ~ D0
D7 ~ D0
4
3-ий D7 ~ D0
3-ее D15 ~ D8
2-ое D31 ~ D24
5

D7 ~ D0
D23 ~ D16
6
4-ый D7 ~ D0
4-ое D15 ~ D8
D15 ~ D8
7

D7 ~ D0
D7 ~ D0
8
5-ый D7 ~ D0
5-ое D15 ~ D8
3-ее D31 ~ D24
9

D7 ~ D0
D23 ~ D16


СТАРТОВЫЙ АДРЕС: 0 Регистр #15=1

Адрес
Байт
Слово
Двойное слово
0
2-ой D7 ~ D0
2-ое D7 ~ D0
1-ое D7 ~ D0
1
1-ый D7 ~ D0
D15 ~ D8
D15 ~ D8
2
4-ый D7 ~ D0
4-ое D7 ~ D0
2-ое D7 ~ D0
3
3-ий D7 ~ D0
D15 ~ D8
D15 ~ D8
4
6-ой D7 ~ D0
6-ое D7 ~ D0
3-ее D7 ~ D0
5
5-ый D7 ~ D0
D15 ~ D8
D15 ~ D8
6
8-ой D7 ~ D0
8-ое D7 ~ D0
4-ое D7 ~ D0
7
7-ой D7 ~ D0
D15 ~ D8
D15 ~ D8
8
10-ый D7 ~ D0
10-ое D7 ~ D0
5-ое D7 ~ D0
9
9-ый D7 ~ D0
D15 ~ D8
D15 ~ D8


СТАРТОВЫЙ АДРЕС: 1 Регистр #15=2

Адрес
Байт
Слово
Двойное слово
0
1-ый D7 ~ D0
1-ое D7 ~ D0
1-ое D23 ~ D16
1

D15 ~ D8
D31 ~ D24
2
2-ой D7 ~ D0
2-ое D7 ~ D0
1-ое D23 ~ D16
3

D15 ~ D8
D31 ~ D24
4
3-ий D7 ~ D0
3-ое D7 ~ D0
2-ое D23 ~ D16
5

D15 ~ D8
D31 ~ D24
6
4-ый D7 ~ D0
4-ое D7 ~ D0
2-ое D23 ~ D16
7

D15 ~ D8
D31 ~ D24
8
5-ый D7 ~ D0
5-ое D7 ~ D0
3-ое D23 ~ D16
9

D15 ~ D8
D31 ~ D24

СТАРТОВЫЙ АДРЕС: 1 Регистр #15=1

Адрес
Байт
Слово
Двойное слово
0
1-ый D7 ~ D0
1-ое D7 ~ D0
1-ое D23 ~ D16
1

D15 ~ D8
D31 ~ D24
2
3-ий D7 ~ D0
3-ее D7 ~ D0
2-ое D23 ~ D16
3
2-ой D7 ~ D0
D15 ~ D8
D31 ~ D24
4
5-ый D7 ~ D0
5-ое D7 ~ D0
3-ое D23 ~ D16
5
4-ый D7 ~ D0
D15 ~ D8
D31 ~ D24
6
7-ой D7 ~ D0
7-ое D7 ~ D0
4-ое D23 ~ D16
7
6-ой D7 ~ D0
D15 ~ D8
D31 ~ D24
8
9-ый D7 ~ D0
9-ое D7 ~ D0
5-ое D23 ~ D16
9
8-ой D7 ~ D0
D15 ~ D8
D31 ~ D24

ЧТЕНИЕ ИЗ VRAM (Видеобуфера)



D7
D6
D5
D4
D3
D2
D1
D0

1 слово
1 байт
0
0
A13
A12
A11
A10
A9
A8
D15 – D8
$C00004
2 байт
A7
A6
A5
A4
A3
A2
A1
A0
D7 – D0
2 слово
1 байт
0
0
0
0
0
0
0
0
D15 – D8
$C00004
2 байт
0
0
0
0
0
0
A15
A14
D7 – D0
Данные
1 байт
DT15
DT14
DT13
DT12
DT11
DT10
DT9
DT8
D15 – D8
$C00000
2 байт
DT7
DT6
DT5
DT4
DT3
DT2
DT1
DT0
D7 – D0

A15~A0 : Адрес VRAM
D15~D0 : Данные VRAM

Данные всегда читаются словом (WORD). При чтении сигнал A0 игнорируется; байты остаются на своих местах
при любых значениях A0 (т.е. при A0=1 байты не обмениваются!).
Последовательные чтения происходят по адресу, который увеличивается на значение в Регистре #15. A0
Используется для вычисления следующего адреса.

_ ДОСТУП К CRAM (ОЗУ ЦВЕТА) _

CRAM содержит 128 байт, адресуемых с 0 по 7FH. Для записи слов в CRAM используйте:



D7
D6
D5
D4
D3
D2
D1
D0

1 слово
1 байт
1
1
0
0
0
0
0
0
D15 – D8
$C00004
2 байт
0
A6
A5
A4
A3
A2
A1
A0
D7 – D0
2 слово
1 байт
0
0
0
0
0
0
0
0
D15 – D8
$C00004
2 байт
0
0
0
0
0
0
0
0
D7 – D0
Данные
1 байт
0
0
0
0
B2
B1
B0
0
D15 – D8
$C00000
2 байт
G2
G1
G0
0
R2
R1
R0
0
D7 – D0

A6~A0 : адрес VRAM
B2, B1, B0 – уровень синего (0…7);
G2, G1, G0 – уровень зеленого (0…7);
R2, R1, R0 – уровень красного (0…7);
Итого: 8*8*8=512 оттенков.

D15 ~ D0 верны при использовании 16 бит (слово). Если используются байты, то надо записывать старший байт в $C00000 и младший в $C00001. Длинное слово эквивалентно двум записям по 16 бит (слово). Первое слово надо поместить в D31 - D16 и второе в D15 - D0. Данные могут быть записаны последовательно; адрес автоматически увеличивается на величину в Регистре #15 после каждой записи, независимо от ширины записи (байт или слово).

Примечание: A0 используется для увеличения, но не для декодирования адреса, при этом получаются некоторые графические эффекты, если записывать по нечетным адресам.

Для чтения слова (WORD) из CRAM, нужно:



D7
D6
D5
D4
D3
D2
D1
D0

1 слово
1 байт
0
0
0
0
0
0
0
0
D15 – D8
$C00004
2 байт
0
A6
A5
A4
A3
A2
A1
A0
D7 – D0
2 слово
1 байт
0
0
0
0
0
0
0
0
D15 – D8
$C00004
2 байт
0
0
1
0
0
0
0
0
D7 – D0
Данные
1 байт
0
0
0
0
B2
B1
B0
0
D15 – D8
$C00000
2 байт
G2
G1
G0
0
R2
R1
R0
0
D7 – D0

A6~A0 : адрес VRAM
R2~R0 : красная составляющая цвета
G2~G0 : зеленая составляющая цвета
B2~B0 : синяя составляющая цвета
_ ДОСТУП К VSRAM (Память прокрутки) _

VSRAM состоит из 80 байтов с адресами от 0 до 4FH. Для обращния словом (WORD) для записи в VSRAM, надо:



D7
D6
D5
D4
D3
D2
D1
D0

1 слово
1 байт
0
1
0
0
0
0
0
0
D15 – D8
$C00004
2 байт
0
A6
A5
A4
A3
A2
A1
A0
D7 – D0
2 слово
1 байт
0
0
0
0
0
0
0
0
D15 – D8
$C00004
2 байт
0
0
0
1
0
0
0
0
D7 – D0
Данные
1 байт
*
*
*
*
*
VS10
VS9
VS8
D15 – D8
$C00000
2 байт
VS7
VS6
VS5
VS4
VS3
VS2
VS1
VS0
D7 – D0

A6~A0 : адрес VSRAM
VS10~VS0 : величина вертикальной прокрутки

Если используется слово (WORD) и данные в D15 ~ D0. D15 - D0 верны при использовании слов. Если запись идет побайтно, старший байт надо записать в $C00000, а младший в $C00001. Доступ двойным словом (LONG WORD) эквивалентен двумя последовательным словам (WORD). Первое слово нужно поместить в D31 - D16 и второе слово в D15 - D0. Данные можно писать последовательно; адрес автоматически увеличится на значение в Регистре #15 после каждой записи, независимо от разрядности доступа (байт или слово).

Примечание: A0 используется для увеличения, но не для декодирования адреса, при этом получаются некоторые графические эффекты, если записывать по нечетным адресам.

Для записи по словам в VSRAM, надо:



D7
D6
D5
D4
D3
D2
D1
D0

1 слово
1 байт
0
0
0
0
0
0
0
0
D15 – D8
$C00004
2 байт
0
A6
A5
A4
A3
A2
A1
A0
D7 – D0
2 слово
1 байт
0
0
0
0
0
0
0
0
D15 – D8
$C00004
2 байт
0
0
0
1
0
0
0
0
D7 – D0
Данные
1 байт
*
*
*
*
*
VS10
VS9
VS8
D15 – D8
$C00000
2 байт
VS7
VS6
VS5
VS4
VS3
VS2
VS1
VS0
D7 – D0

A6~A0 : адрес VSRAM
VS10~VS0 : величина вертикальной прокрутки

_ ВРЕМЕННЫЕ ИНТЕРВАЛЫ ДОСТУПА _

CPU и VDP используют CRAM, CRAM и VSRAM по очереди. Потому что VDP очень занят во время отображения картинки, доступ для CPU сильно ограничен. Однако во время кадрового гашения CPU может работать с VDP продолжительно.

Количество разрешенных доступов CPU дополнительно зависит от режима 32 ячейки или 40 ячеек. Еще зависит от размера обмениваемых данных, который зависит от типа RAM: VRAM всегда побайтно, а CRAM и CSRAM всегда словами (WORD).





Например, в режиме 32 символов в строке, CPU может получить доступ 16 раз за строку. Каждый доступ разрядностью в 1 байт и это нужно учитывать. CRAM и CSRAM делят 16-ти разовый лимит, но разрядностью в слово (WORD), поэтому может быть записано 16 слов за строку.

Дополнительно, у VDP есть буфер FIFO на 4 слова (WORD). Если писать во время сильной загрузки VDP или во время показа строки, буфер наполнится и процессору придется ждать освобождения VDP.

Максимальное время ожидания:

РЕЖИМ ДИСПЛЕЯ
ВРЕМЯ ОЖИДАНИЯ
32 символа в строке
Примерно 5.96 µsec
40 символов в строке
Примерно 4.77 µsec

CPU получает безграничный доступ к своему ОЗУ (RAM) в любое время.

_ СЧЕТЧИК КООРДИНАТ ЛУЧА _

Счетчик HV дает координаты горизонтали и вертикали телевизионного луча. Если бит "M3" Регистра #0 установлен в “1”, счетчик HV будет остановлен когда сигнал HL будет равен “1”, так же, как переключается прерывание уровня 2.

M3
РЕЖИМ СЧЕТЧИКА
0
СЧЕТЧИК НЕ СООТВЕТСТВУЕТ ПО СИГНАЛУ ЗАЩЕЛКИ
1
СЧЕТЧИК СООТВЕТСТВУЕТ ПО СИГНАЛУ ЗАЩЕЛКИ
M3: Регистр # 0

НЕ ЧЕРЕЗСТРОЧНЫЙ РЕЖИМ



D7
D6
D5
D4
D3
D2
D1
D0

$C00008
1 байт
VC7
VC6
VC5
VC4
VC3
VC2
VC1
VC0
D15 – D8

2 байт
HC8
HC7
HC6
HC5
HC4
HC3
HC2
HC1
D7 – D0


ЧЕРЕЗСТРОЧНЫЙ РЕЖИМ



D7
D6
D5
D4
D3
D2
D1
D0

$C00008
1 байт
VC7
VC6
VC5
VC4
VC3
VC2
VC1
VC8
D15 – D8

2 байт
HC8
HC7
HC6
HC5
HC4
HC3
HC2
HC1
D7 – D0

V-СЧЕТЧИК СТРОК: VC7~VC0 H-СЧЕТЧИК СТОЛБЦОВ: HC8~HC1
РЕЖИМ ДИСПЛЕЯ
ДАННЫЕ СЧЕТЧИКА

РЕЖИМ ДИСПЛЕЯ
ДАННЫЕ СЧЕТЧИКА
28 СИМВОЛОВ
0 ~ DFH

32 СИМВОЛА
0 ~ 7FH
30 СИМВОЛОВ
0 ~ EFH

40 СИМВОЛОВ
0 ~ 9FH

Счетчик имеет всего 8 бит на вертикаль и горизонталь, поэтому чересстрочный режим на 40 символов (320 точек) дает некоторые проблемы. В чересстрочном режиме младший бит выпадает (т.е. число нужно умножить на 2 и прибавить бит четного кадра из регистра статуса). По горизонтали младший бит выпадает ВСЕГДА.

ПРЕДУПРЕЖДЕНИЕ:
Счетчик координат НЕДЕЙСТВИТЕЛЕН во время кадрового гашения. Перед чтением значения счетчика, проверьте статус VDP на предмет формирования изображения.

§ 7 ПЕРЕСЫЛКА С ПОМОЩЮ DMA

DMA (Direct Memory Access или ПДП: Прямой Доступ к Памяти) высокоскоростная техника пересылки информации из памяти в VRAM, CRAM и VSRAM. Во время цикла DMA достигается максимальная скорость доступа к VRAM, CRAM и VSRAM (смотрите секцию по таймингам доступа). Есть 3 режима доступа DMA. Как показано ниже, все режимы могут быть использованы для VRAM или CRAM или VSRAM. 68K останавливается на время DMA доступа к VRAM/CRAM/ VSRAM, но Z80 продолжает работать до тех пор, пока не попытается обратиться к ресурсам 68K.

DMA очень эффективен во время кадрового гашения ( VBLANK). Примерно в 2 раза быстрее, чем может программно 68K, но во время отображения скорость такая же, как и у 68K.

Примечание: далее термин VRAM используется для всех типов видеопамяти (VRAM/CRAM/VSRAM).

DMD1
DMD0
РЕЖИМ DMA
РАЗМЕР
0
SA23
A. из памяти в V-RAM
WORD по байтам (Ст)и(Мл)
1
0
B. заполнение VRAM
Побайтно
1
1
C. копирование VRAM
Побайтно

DMD1, DMD0 : Регистр #23 * DMD0=SA23

Адрес источника $000000-$3FFFFF(ROM) и $FFOOOO--$FFFFFF(RAM) для пересылок из памяти в VRAM.
В случае пересылки из ROM в VRAM, может произойти ошибка аппаратуры DMA если присутствуют два состояния:
-- Результирующий адрес (через $C00004) должен быть в режиме записи слова.
-- Финальная запись режима должна использовать рабочую RAM.
Можно достичь этого либо копированием программы управления DMA в RAM или используя последнюю запись режима DMA используя "move.w ram address $C00004" для пересылки из памяти в VRAM.

_ ИЗ ПАМЯТИ В VRAM _

Функция пересылки из памяти 68K в VRAM, CRAM или VSRAM. Используя DMA, все процессы 68K останавливаются. Источник будет $000000-$3FFFFF для ROM или $FFOOOO-$FFFFFF для RAM. Чтения DMA происходят по словам. Записи происходят по байтам для VRAM и по словам для CRAM и VSRAM. Приемник выбирается следующим образом:

CD2
CD1
CD0
ТИП ПАМЯТИ
0
0
1
VRAM
0
1
1
CRAM
1
0
1
VSRAM

Настройка DMA

(A) M1 (Регистр #1)=1 : Включение DMA
(B) Установка автоматического увеличения адреса в Регистре #15 (обычно 2)
(C) Количество пересылаемых слов в Регистр #19 и #20.
(D) Установить адрес источника в Регистры #21, #22, #23.
(E) Установить адреса приемника.
(F)*VDP захватывает шины CPU.
(G)*DMA стартует.
(H)*VDP освобождает шины CPU.
(I) M1 сбрасывается на “0” после окончания процесса DMA: DMA выключено.

DMA стартует после шага (E).
Вы должны установить M1=1 при режиме DMA иначе нельзя гарантировать успешную операцию. Адрес источника будет увеличиваться на 2 и адрес приемника будет увеличиваться на значение в Регистре #15.

Примечание: Регистр #1 имеет другие биты.

Шаг
Регистр
D7
D6
D5
D4
D3
D2
D1
D0
1
№15
INC7
INC6
INC5
INC4
INC3
INC2
INC1
INC0
2
№1
0
DISP
IE0
M1
M2
1
0
0
3
№19
LG7
LG6
LG5
LG4
LG3
LG2
LG1
LG0
4
№20
LG15
LG14
LG13
LG12
LG11
LG10
LG9
LG8
5
№21
SA8
SA7
SA6
SA5
SA4
SA3
SA2
SA1
6
№22
SA16
SA15
SA14
SA13
SA12
SA11
SA10
SA9
7
№23
DMD1
DMD0
SA22
SA21
SA20
SA19
SA18
SA17
8
$C00004
CD1
CD0
DA13
DA12
DA11
DA10
DA9
DA8
9

A7
A6
A5
A4
A3
A2
A1
A9
10

0
0
0
0
0
0
0
0
11

1
0
0
CD2
0
0
DA15
DA14

INC7~INC0 : номер увеличения
LG15~LG0 : Количество перемещаемых слов
SA23~SA1 : Адрес источника (у 68000)
DA15~DAO : Адрес приемника (у VDP)
CD2~CDO : Выбор RAM

• От переводчика:
• Внимание! Бит D7, установленный в 1 на 11-ом шаге обозначен как CD5. Этот бит используется в VDP при
инициализации и запуска сервиса DMA. При этом дополнительной информации обо всех вариантах кода ID нет.
Будьте внимательны, в примерах указаны нормальные значения.
_ ЗАПОЛНЕНИЕ VRAM _

В этом режиме происходит заполнение одинаковыми данными с четного адреса VRAM, и ТОЛЬКО для VRAM.

Настройки режима заполнения (DMA).

(A) M1 (REG. #1)=1 : Включить DMA
(B) Установка автоматического увеличения адреса в Регистре #15 (обычно 1).
(C) Установить размер области заполнения в Регистрах #19, #20.
(D) Режим DMA в Регистре #23.
(E) Установить область заполнения и данные заполнения.
(F) * DMA стартует
(G) M1 сбрасывается на “0” после окончания процесса DMA: DMA выключено
:DMA отключается

DMA стартует после шага (E).
Вы должны установить M1=1 при режиме DMA иначе нельзя гарантировать успешную операцию.
Адрес заполняемой области будет увеличиваться на число в Регистре #15. VDP не требует захвата шин CPU, но CPU не сможет получить доступ к VDP кроме PSG, счетчика строк/кадров и регистра статуса. Вы можете отследить завершение DMA по биту в регистре статуса.



D7
D6
D5
D4
D3
D2
D1
D0

$C00004
1 байт
*
*
*
*
*
*
EMPTY
FULL
D15 – D8

2 байт
F
SOVR
C
ODD
VB
HB
DMA
PAL
D7 – D0

DMA=1 : DMA занят
* : не используются

Установка регистров.
Примечание: Регистр #l имеет другие биты.

Шаг
Регистр
D7
D6
D5
D4
D3
D2
D1
D0
1
№15
INC7
INC6
INC5
INC4
INC3
INC2
INC1
INC0
2
№1
0
DISP
IE0
M1
M2
1
0
0
3
№19
LG7
LG6
LG5
LG4
LG3
LG2
LG1
LG0
4
№20
LG15
LG14
LG13
LG12
LG11
LG10
LG9
LG8
5
№21
SA8
SA7
SA6
SA5
SA4
SA3
SA2
SA1
6
№22
SA16
SA15
SA14
SA13
SA12
SA11
SA10
SA9
7
№23
DMD1
DMD0
SA22
SA21
SA20
SA19
SA18
SA17
8
$C00004
0
1
DA13
DA12
DA11
DA10
DA9
DA8
9

DA7
DA6
DA5
DA4
DA3
DA2
DA1
DA0
10

0
0
0
0
0
0
0
0
11

1
0
0
0
0
0
DA15
DA14
12
$C00000
FD15
FD14
FD13
FD12
FD11
FD10
FD9
FD8
13

FD7
FD6
FD5
FD4
FD3
FD2
FD1
FD0

INC7~INC0 : Значение увеличения адреса
LG15~LG0 : Количество заполняемых байт
DA15~DA0 : Адрес области заполнения
FD15~FD0 : Данные для заполнения

При записи в $C00004 длинным словом (Long WORD), 1ое будет в битах D31 - D16, а 2ое в битах D15 - D0.

ПРИМЕРЫ:

1 ТЕРМИН: Данные заполнения – слово (WORD), Регистр #15=1

a. Адрес V-RAM четный.

(A) Сначала младший байт данных заполнения запишется по адресу V-RAM.
(B) Затем старший байт данных заполнения запишется по адресуV-RAM+1.
(C) И адрес V-RAM сложится со значением регистра #15, старший байт данных заполнения будет записываться в V-RAM каждый следующий шаг.

b. Адрес V-RAM нечетный.

(D) Сначала старший байт данных заполнения запишется по адресу V-RAM-1.
(E) Затем младший байт данных заполнения запишется по адресу V-RAM.
(F) То же, что и (C).

•адрес VRAM четный: •адрес VRAM нечетный:
ADD
(A)
Четный

ADD-1
(D)
Четный
ADD+1
(B) (C)
Нечетный

ADD
(E)
Нечетный
ADD+2
(C)


ADD+1
(F)

ADD+3
(C)


ADD+2
(F)

ADD+4
(C)


ADD+3
(F)

ADD+5
(C)


ADD+4
(F)

ADD+6
(C)


ADD+5
(F)

ADD+7



ADD+6
(F)





ADD+7



* Вы должны перезаписать данные (C) по адресу ADD+1 после записи (B).
2. ТЕРМИН: Данные заполнения – слово (WORD), Регистр #15=2

•адрес VRAM четный •адрес VRAM нечетный
ADD
(A)мл. байт
Четный

ADD-1
(D)ст. байт
Четный
ADD+1
(B)ст. байт
Нечетный

ADD
(E)мл. байт
Нечетный
ADD+2
(C)мл. байт


ADD+1


ADD+3
ст. байт


ADD+2
(F)ст. байт

ADD+4
(C)мл. байт


ADD+3
мл. байт

ADD+5
ст. байт


ADD+4
(F)ст. байт

ADD+6
(C)мл. байт


ADD+5
мл. байт

ADD+7
ст. байт


ADD+6
(F)ст. байт





ADD+7
мл. байт




3. ТЕРМИН: Данные заполнения - байт.

a. Адрес V-RAM четный.

(A) = (B) = (C) = Байт * DATA

b. Адрес V-RAM нечетный.

(D) = (E) = (F) = Байт * DATA

_ КОПИРОВАНИЕ VRAM _

Эта функция копирует байты из источника в место назначения несколько байт.

Установки DMA

(A) M1 (Рег. №1) = 1 : Включить DMA
(B) Количество копируемых байт в регистры №19. №20
(C) Адрес оригинала и режим DMA в регистр №21, №22 и №23.
(D) Установить адрес копии.
(E) *DMA стартует
(F) После подтверждения окончания пересылки DMA
:M1=O : DMA выключен

DMA стартует после (D). Использовать M1=1 только при использовании DMA. В других случаях, если M1=1 установлен, нет гарантии того, что функция будет работать правильно. Во время пересылки DMA, адрес копии увеличивается на значение в регистре #15. Во время пересылки с DMA не требует освобождения шин CPU, для CPU недоступен VDP кроме: PSG, счетчик строк/кадров и регистр статуса. Окончание пересылки с DMA следует ждать по биту DMA в регистре статуса.

Пример: Количество байт=3

Рег. #15=1 Рег. #15=2
Адрес оригинала Адрес копии Адрес копии
DATA 1

DATA 1

DATA 1
DATA 2

DATA 2


DATA 3

DATA 3

DATA 2
DATA 4

DATA4


DATA 5



DATA 3
DATA 6




DATA 7



DATA4






* ВНИМАНИЕ
В случае копирования VRAM, "чтение из VRAM" и "запись в VRAM" повторяются побайтно. Поэтому, когда область оригинала и область копии перекрываются, пересылка может быть некорректной.

Пример программирования дан ниже.
Примечание: Регистр #1 содержит другие биты, кроме DMA, поэтому будьте внимательны при программировании.



D7
D6
D5
D4
D3
D2
D1
D0

$C00004
1 байт
*
*
*
*
*
*
EMPTY
FULL
D15 – D8

2 байт
F
SOVR
C
ODD
VB
HB
DMA
PAL
D7 – D0

DMA=1 : DMA занят

Шаг
Регистр
D7
D6
D5
D4
D3
D2
D1
D0
1
№15
INC7
INC6
INC5
INC4
INC3
INC2
INC1
INC0
2
№1
0
DISP
IE0
M1
M2
1
0
0
3
№19
LG7
LG6
LG5
LG4
LG3
LG2
LG1
LG0
4
№20
LG15
LG14
LG13
LG12
LG11
LG10
LG9
LG8
5
№21
SA8
SA7
SA6
SA5
SA4
SA3
SA2
SA1
6
№22
SA16
SA15
SA14
SA13
SA12
SA11
SA10
SA9
7
№23
DMD1
DMD0
SA22
SA21
SA20
SA19
SA18
SA17
8
$C00004
0
0
DA13
DA12
DA11
DA10
DA9
DA8
9

DA7
DA6
DA5
DA4
DA3
DA2
DA1
DA0
10

0
0
0
0
0
0
0
0
11

1
0
0
0
0
0
DA15
DA14

INC7~INC0 : Шаг увеличения адреса.
LG15~LG0 : Количество копируемых байт.
SA23~SA1 : Адрес оригинала.
DA15~DAO : Адрес копии.

При использовании записи в регистр $C00004 двойным словом, порядок записи битов будет следующий: 1 - D31-D24,
2 - D23-D16, 3 – D15-D8, 4 – D7-D0.

• От переводчика:
• Внимание! Бит D7, установленный в 1 на 11-ом шаге обозначен как CD5. Этот бит используется в VDP при
инициализации и запуска сервиса DMA. При этом дополнительной информации обо всех вариантах кода ID нет.
Будьте внимательны, в примерах указаны нормальные значения.
_ ПРОИЗВОДИТЕЛЬНОСТЬ ПЕРЕДАЧИ DMA _

Производительность передачи данных сервисом DMA зависит от режима дисплея:

РЕЖИМ DMA
РЕЖИМ ДИСПЛЕЯ
ХОД ЛУЧА
ПЕРЕСЫЛКА БАЙТ ЗА 1 СТРОКУ
ИЗ ПАМЯТИ
32 СИМВОЛА
ПРИ ОТОБРАЖЕНИИ
ПРИ КАДРОВОМ ОБРАТНОМ ХОДЕ
16 байт
167 байт
В ВИДЕОБУФЕР
40 СИМВОЛОВ
ПРИ ОТОБРАЖЕНИИ
ПРИ КАДРОВОМ ОБРАТНОМ ХОДЕ
18 байт
205 байт
ЗАПОЛНЕНИЕ
32 СИМВОЛА
ПРИ ОТОБРАЖЕНИИ
ПРИ КАДРОВОМ ОБРАТНОМ ХОДЕ
15 байт
166 байт
ВИДЕОБУФЕРА
40 СИМВОЛОВ
ПРИ ОТОБРАЖЕНИИ
ПРИ КАДРОВОМ ОБРАТНОМ ХОДЕ
17 байт
204 байта
КОПИРОВАНИЕ
32 СИМВОЛА
ПРИ ОТОБРАЖЕНИИ
ПРИ КАДРОВОМ ОБРАТНОМ ХОДЕ
8 байт
83 байта
ВИДЕОБУФЕРА
40 СИМВОЛОВ
ПРИ ОТОБРАЖЕНИИ
ПРИ КАДРОВОМ ОБРАТНОМ ХОДЕ
9 байт
102 байта

Если бит DISP=0, в Регистре №1, т.е. когда изображение не формируется, производительность DMA за время “ПРИ ОТОБРАЖЕНИИ” такое же, как и при “ПРИ КАДРОВОМ ГАШЕНИИ”.
В режиме “Из памяти в видеобуфер”, если приемник CRAM или VSRAM, используется количество слов (WORD) а не байт.
При доступе к CRAM или VSRAM хватает одной строки во время Кадрового гашения.

Учитывайте при расчетах, что общая производительность DMA за один кадровый растр (1/60 секунды для NTSC и 1/50 секунды для PAL) зависит от количества строк за время Кадрового гашения (см. Режим Дисплея). В случае с NTSC (видеосигнал) и систем PAL.

Режим Дисплея
Количество строк
28 символов по вертикали (NTSC)
36
28 символов по вертикали (PAL)
87
30 символов по вертикали (PAL)
71



§8 ПРОКРУТКА ЭКРАНА (Скроллинг)

Есть два разных прокручиваемых экрана A и B, которые могут прокручиваться по вертикали и по горизонтали не зависимо друг от друга. Минимальная и основная единица прокрутки - 1 точка растра. При прокрутке по горизонтали, можно выбрать два режима прокрутки: прокрутка по символам (блоки в 8 строк) и прокрутка по строкам (отдельные строки экрана. Вертикальная прокрутка может быть либо весь экран, либо столбики из двух символов (16 точек). Размер прокручиваемого экрана можно менять с шагом в 32 символа (8х8 точек).



При прокрутки необходимо программировать Регистры и место в видеобуфере VRAM.

Плоскость прокрутки “A” – Базовый адрес таблицы символов


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №2
0
0
SA15
SA14
SA13
0
0
0

Плоскость прокрутки “B” – Базовый адрес таблицы символов


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №4
0
0
0
0
0
SB15
SB14
SB13

Регистр режима №3


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №11
0
0
0
0
IE2
VSCR
HSCR
LSCR

Регистр режима №4


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №12
RS0
0
0
0
S/TE
LSM1
LSM0
RS1

Базовый адрес таблицы горизонтальной прокрутки


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №13
0
0
HS15
HS14
HS13
HS12
HS11
HS10

Размер прокрутки


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №16
0
0
VSZ1
VSZ0
0
0
HSZ1
HSZ0

VRAM : Таблица плоскости прокрутки “A” максимум 8Кбайт
Таблица плоскости прокрутки “B” максимум 8Кбайт
Таблица горизонтальной прокрутки максимум 960 байт
VSRAM : Таблица вертикальной прокрутки максимум 80 байт

_ Размер прокручиваемого экрана _

Размер прокручиваемого экрана задается битами VSZ1, VSZ0, HSZ1 и HSZ0 в Регистре №16.
6 разных методов прокрутки можно установить для обоих плоскостей (“A” и “B”).

32*32/32*64/32*128
64*32/64*64
128*32

VSZ1
VSC0
Функция

HSZ1
HSZ0
FUNCTION
0
0
32 символа по вертикали

0
0
32 по горизонтали
0
1
64 символа по вертикали

0
1
64 по горизонтали
1
0
запрещено

1
0
запрещено
1
1
128 символа по вертикали

1
1
128 по горизонтали

Таблицы символов обоих плоскостей находятся в видеобуфере VRAM и устанавливаются Регистрами №2 и №4. Обе плоскости разделяют VRAM и взаимодействуют друг с другом.

ПРИМЕР


Регистр №16 = 00H : 32*32 символа

0
1



30
31
0
0000
0002

003C
003E
1
0040
0042

007C
007E

Размер - 32x32 символа




30
0780
0782

07BC
07BE
31
07C0
07C2

07FC
07FE




Регистр №16 = 11H : 64*64 символа

0
1



62
63
0
0000
0002

007C
007E
1
0080
0082

00FC
00FE

Размер - 64x64 символа




62
1F00
1F02

1F7C
1F7E
63
1FC0
1FC2

1FFC
1FFE



Регистр №16 = 03H : 128*32 символа

0
1



126
127
0
0000
0002

00FC
00FE
1
0100
0102

01FC
01FE

Размер – 128x32 символа




30
1E00
1E02

1EFC
1EFE
31
1F00
1F02

1FFC
1FFE

Значения адресов ячеек даны как смещение относительно базового адреса таблицы символов.

_ Горизонтальная прокрутка _

Отображаемый экран можно сдвигать целиком, либо отдельно каждую строку символов (8 линий), либо каждую строку экрана отдельно. Режим прокрутки выбирается битами HSCR и LSCR в Регистре №11. Установки применяются к обоим плоскостям (“A” и “B”) одновременно.

HSCR
LSCR
Функция
0
0
Экран целиком
0
1
Запрещено
1
0
Строка символов (8 строк экрана)
1
1
Строка экрана
HSCR, LSCR : Регистр №11

Размер значения сдвига экрана – 10 бит. (000H-3FFH).
Если брать отображаемый экран за основу, то направление сдвига будет таким:



Таблица горизонтального сдвига: Таблица горизонтальной прокрутки находится в видеобуфере VRAM. Начинается с базового адреса, заданного в Регистре №13. Значение сдвига для плоскостей “A” и “B” устанавливается раздельно. Еще, значение горизонтального сдвига зависит от режима (экран целиком, каждая строка символов или каждая отдельная строка).

Режим
Позиция в таблице
Целиком
Строка 0
Строка символов
Каждая 8-ая строка, начиная с 0-ой
Строка экрана
Все строки

Адрес
D15-D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
Сдвигает
00

A •Значение сдвига плоскости “A”
Целиком, Строку символов, Строку экрана
02

B • Значение сдвига плоскости “B”
Целиком, Строку символов, Строку экрана
04

A • Значение сдвига плоскости “A”
Строку экрана
06

B • Значение сдвига плоскости “B”
Строку экрана
08

A • Значение сдвига плоскости “A”
Строку экрана
0A

B • Значение сдвига плоскости “B”
Строку экрана








1C

A • Значение сдвига плоскости “A”
Строку экрана
1E

B • Значение сдвига плоскости “B”
Строку экрана
20

A • Значение сдвига плоскости “A”
Строку символов, Строку экрана
22

B • Значение сдвига плоскости “B”
Строку символов, Строку экрана








3FC

A • Значение сдвига плоскости “A”
Строку экрана
3FE

B • Значение сдвига плоскости “B”
Строку экрана

Биты D15-D10 можно использовать в своих целях.

_ Вертикальная прокрутка _

Отображаемый экран можно сдвигать по вертикали либо целиком, либо столбиками по 2 символа (16 точек). Режим задается битом VSCR в Регистре №11. Установка режима происходит одновременно для обоих плоскостей.

VSCR
Функция
0
Целиком экран
1
Столбиками по 2 символа
VSCR : Регистр №11

Размер значения сдвига экрана – 11 бит. (000H-7FFH). Однако, он меняется, в зависимости от режима отображения:

Режим
Размер значения сдвига
Не чересстрочный
10 бит
Чересстрочный 1
10 бит
Чересстрочный 2
11 бит

Если брать отображаемый экран за основу, то направление сдвига будет таким:


Значение сдвига по вертикали задается в VSRAM. Можно задавать сдвиг плоскостей “A” и “B” раздельно.

Как и в случае с горизонтальным сдвигом, значение вертикального сдвига зависит от режима (экран целиком, 2 столбика символов):
Режим
Позиция в таблице
Целиком
Только в начале
2 столбика символов
Все

Адрес
D15-D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
Сдвигает
00

A •Значение сдвига плоскости “A”
Столбик 0 и 1, Целиком
02

B • Значение сдвига плоскости “B”
Столбик 0 и 1, Целиком
04

A • Значение сдвига плоскости “A”
Столбик 2 и 3
06

B • Значение сдвига плоскости “B”
Столбик 2 и 3
08

A • Значение сдвига плоскости “A”
Столбик 4 и 5
0A

B • Значение сдвига плоскости “B”
Столбик 4 и 5
0C

A • Значение сдвига плоскости “A”
Столбик 6 и 7
0E

B • Значение сдвига плоскости “B”
Столбик 6 и 7








4C

A • Значение сдвига плоскости “A”
Столбик 38 и 39
4E

B • Значение сдвига плоскости “B”
Столбик 38 и 39

Биты D15-D11 не определены.


_ ТАБЛИЦА СИМВОЛОВ ПЛОСКОСТИ _

Таблица символов располагается в видеобуфере VRAM и находится по адресу, задаваемому в Регистре №2 для плоскости “A” и в Регистре №4 для плоскости “B”. На каждый символ отводится 2 байта (1 слово – WORD). Размер таблицы и количество символов в строке/столбце зависит от размера плоскости (см. выше, Размер прокручиваемого экрана).



D7
D6
D5
D4
D3
D2
D1
D0

Символ
1 байт
PRI
CP1
CP0
VF
HF
PT10
PT9
PT8
D15 – D8

2 байт
PT7
PT6
PT5
PT4
PT3
PT2
PT1
PT0
D7 – D0

PRI : Приоритет (см. Приоритет)
CP1,CP0 : Палитра цвета. (см. Палитра цвета)
VF : Зеркальный поворот по вертикали (1 – зеркало)
HF : Зеркальный поворот по горизонтали (1 – зеркало)
PT10-PT0 : Номер символа (тайла) в символьном генераторе

Биты поворота VF и HF : Позволяют на аппаратном уровне провести зеркализацию тайла (символа).


VF = 0 VF = 1 VF = 0 VF = 1
HF = 0 HF = 0 HF = 1 HF = 1

_ СИМВОЛЬНЫЙ ГЕНЕРАТОР _

Символьный генератор располагается по адресу 0000H в видеобуфере VRAM, все символы (тайлы) основаны на матрице точек с размером 8х8. Чтобы описать 1 символ необходимо 32 байта, так как на 1 точку приходится 4 бита. Символы в генераторе хранятся друг за другом, начиная с 0 по адресу 0000H, потом 1 по адресу 0020H и т.д. Соответствие точек матрицы символа и информации в памяти генератора показана ниже:


0
1
2
3

D7-D4
D3-D0
D7-D4
D3-D0
D7-D4
D3-D0
D7-D4
D3-D0
00H
A1
A2
A3
A4
A5
A6
A7
A8
04H
B1
B2
B3
B4
B5
B6
B7
B8
08H
C1
C2
C3
C4
C5
C6
C7
C8
0CH
D1
D2
D3
D4
D5
D6
D7
D8
10H
E1
E2
E3
E4
E5
E6
E7
E8
14H
F1
F2
F3
F4
F5
F6
F7
F8
18H
G1
G2
G3
G4
G5
G6
G7
G8
1CH
H1
H2
H3
H4
H5
H6
H7
H8

Как видно из таблицы, в байте располагается 2 точки, по 4 бита на точку. Это позволяет указать на 1 из 16 цветов каждой точке:

D7
D6
D5
D4
D3
D2
D1
D0
COL3
COL2
COL1
COL0
COL3
COL2
COL1
COL0

В чересстрочном режиме один символ (тайл) имеет матрицу 8X16 точек. Соответственно, он занимает 64 байта памяти:


0
1
2
3

D7-D4
D3-D0
D7-D4
D3-D0
D7-D4
D3-D0
D7-D4
D3-D0
00H
A1
A2
A3
A4
A5
A6
A7
A8
04H
B1
B2
B3
B4
B5
B6
B7
B8
08H
C1
C2
C3
C4
C5
C6
C7
C8
0CH
D1
D2
D3
D4
D5
D6
D7
D8
10H
E1
E2
E3
E4
E5
E6
E7
E8
14H
F1
F2
F3
F4
F5
F6
F7
F8
18H
G1
G2
G3
G4
G5
G6
G7
G8
1CH
H1
H2
H3
H4
H5
H6
H7
H8
20H
I1
I2
I3
I4
I5
I6
I7
I8
24H
J1
J2
J3
J4
J5
J6
J7
J8
28H
K1
K2
K3
K4
K5
K6
K7
K8
2CH
L1
L2
L3
L4
L5
L6
L7
L8
30H
M1
M2
M3
M4
M5
M6
M7
M8
34H
N1
N2
N3
N4
N5
N6
N7
N8
38H
O1
O2
O3
O4
O5
O6
O7
O8
3CH
P1
P2
P3
P4
P5
P6
P7
P8


§ ОКНО

Для отображения окна, требуется установить значения следующих регистров и видеобуфера VRAM:

БАЗОВЫЙ АДРЕС ДЛЯ ОКНА


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №3
0
0
WD15
WD14
WD13
WD12
WD11
0

РЕГИСТР РЕЖИМА №4


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №12
RS0
0
0
0
S/TE
LSM1
LSM0
RS1

ПОЗИЦИЯ ОКНА ПО ГОРИЗОНТАЛИ


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №17
RIGHT
0
0
WHP5
WHP4
WHP3
WHP2
WHP1

ПОЗИЦИЯ ОКНА ПО ВЕРТИКАЛИ


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №18
DOWN
0
0
WVP4
WVP3
WVP2
WVP1
WVP0

Видеобуфер VRAM: таблица символов окна по адресу с базой в Регистре №3 - максимально 4Кбайт


_ ПОЗИЦИЯ ОТОБРАЖЕНИЯ ОКНА _

Позиция отображения окна определяется в Регистрах №17 и №18.
Экран можно разделить на строки (по одному символу) и столбцы (по 2 символа) символов. Это разделение зависит от режима:



0
1
2
3
4
5
---
34
35
36
37
38
39
0







1







2







---

25







26







27








Режим 40х28 символов.


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №17
RIGHT
0
0
WHP5
WHP4
WHP3
WHP2
WHP1


D7
D6
D5
D4
D3
D2
D1
D0
Регистр №18
DOWN
0
0
WVP4
WVP3
WVP2
WVP1
WVP0

RIGHT : 0 Отображает Окно с левого края до базовой точки “H” Окна.
1 Отображает Окно с базовой точки “H” Окна до правого края.
DOWN : 0 Отображает Окно с верхнего края до базовой точки “V” Окна.
1 Отображает Окна с базовой точки “V” Окна до нижнего края.
WHP5-WHP1 : Граница разделения по горизонтали (базовая точка H).
WVP4-WVP0 : Граница разделения по вертикали (базовая точка “V”).

Размер по горизонтали
Точка разделения (WHP)

Размер по вертикали
Точка разделения (WVP)
32 символов
0 - 16 (0 - 32 символов)

28 символов
0 - 28
40 символа
0 - 20 (0 - 40 символа)

30 символов
0 - 30

ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ ОКНА

Регистр №17 : 00H + 01H Окно с левого края до следующего символа.
Регистр №18 : 00H + 10H Окно с верхнего края до 16-го символа.



Регистр №17 : 80H + 02H Окно с 4-го символа слева до правого края.
Регистр №18 : 80H + 01H Окно со 2-го символа сверху до нижнего края.



Регистр №17 : 80H + 01H Окно с 4-го символа до правого края.
Регистр №18 : 00H + 10H Окно с верхнего края до 16-го символа.



Регистр №17 : 00H + 02H Окно с левого края до 4-го символа.
Регистр №18 : 80H + 01H Окно со 2-го символа сверху до нижнего края.



_ ПРИОРИТЕТ ОКНА _

Приоритет Окна реализован так же, как и приоритет Плоскости “A”. Плоскость “A” не отображается в том месте, где отображается окно. Если Окно установлено слева и Плоскость “A” сдвигается по горизонтали, то символы, находящиеся в двух вертикальных столбцах справа от границы Окна будут испорчены. Этого не наблюдается, если Окно установлено слева и Плоскость “A” перемещается по вертикали, или если Окно установлено справа.



_ ТАБЛИЦА СИМВОЛОВ ОКНА _

Таблица символов Окна находится в видеобуфере VRAM, базовый адрес задается в Регистре №13. Формат символа Окна совпадает с форматом символа Плоскостей.




D7
D6
D5
D4
D3
D2
D1
D0

Символ
1 байт
PRI
CP1
CP0
VF
HF
PT10
PT9
PT8
D15 – D8

2 байт
PT7
PT6
PT5
PT4
PT3
PT2
PT1
PT0
D7 – D0

PRI : Приоритет.
CP1, CP0 : Палитра цветов.
VF : Зеркало по вертикали (1 – зеркально).
HF : Зеркало по горизонтали (1 – зеркально).
PT10-PT0 : Номер символа в знакогенераторе.
Таблица символов очень сильно зависит от режима (32/40 символов по горизонтали). Будьте внимательны.


Режим: 32 символа по горизонтали

0
1



30
31
0
0000
0002

003C
003E
1
0040
0042

007C
007E

Размер - 32x32 символа




30
0780
0782

07BC
07BE
31
07C0
07C2

07FC
07FE



Режим: 40 символа по горизонтали

0
1

39
40

62
63
0
0000
0002

004E
0050

007C
007E
1
0080
0082

00DC
00E0

00FC
00FE

Размер - 64x32 символа







30
0F00
0F02

0F4E
0F50

0F7C
0F7E
31
0FC0
0FC2

0FDE
0FE0

0FFC
0FFE

В жирной рамке – отображаемая часть. Столбцы 40-63 никогда не отображаются.

В режиме 40 символов по горизонтали, плоскость состоит из 64 символов по горизонтали. Однако символы, начиная с 40 по 63 отображаться не будут (см. таблицу). Также, в режиме 28 символов по вертикали, не будут отображаться строки, начиная с 29 символа. В режиме 30 символов по вертикали не будет отображаться строки, начиная с 31.

S/TEN = 1
ПАЛИТРА ЦВЕТА СПРАЙТОВ = 3, КОД ЦВЕТА = 14




G : Задний фон.
A : Плоскость прокрутки “A”.
B : Плоскость прокрутки “B”.
S : Плоскость спрайтов.

Точки Спрайта с кодом цвета 15 работают как операторы на экране и “просвечивают” другие плоскости с более низким приоритетом. Соответственно, эти точки не отображаются.

Когда у Спрайта не установлен приоритет, применяется следующий порядок:






ПРИМЕР УСТАНОВОК


Цепочка данных

Результат
Спрайт 0
2

Спрайт 0
Спрайт 1
10

Спрайт 2
Спрайт 2
1

Спрайт 1
Спрайт 3
4

Спрайт 10
Спрайт 4
5

Спрайт 11
Спрайт 5
15

Спрайт 13
Спрайт 6
----

Спрайт 3
Спрайт 7
0

Спрайт 4
Спрайт 8
----

Спрайт 5
Спрайт 9
----

Спрайт 15
Спрайт 10
11

Спрайт 7
Спрайт 11
13


Спрайт 12
----


Спрайт 13
3


Спрайт 14
----


Спрайт 15
7


Спрайт 16
----







11 Спрайтов, показанных в таблице справа, будут отображены. Спрайты №6, №8, №9, №12, №14, и №16 не будут отображены, потому, что не участвуют в цепочке приоритетов Спрайтов.


_ ЗНАКОГЕНЕРАТОР СПРАЙТОВ _

Символьный генератор спрайтов располагается по адресу 0000H в видеобуфере VRAM, все символы (тайлы) основаны на матрице точек с размером 8х8. Чтобы описать 1 символ необходимо 32 байта, так как на 1 точку приходится 4 бита. Символы в генераторе хранятся друг за другом, начиная с 0 по адресу 0000H, потом 1 по адресу 0020H и т.д. Соответствие точек матрицы символа и информации в памяти генератора показана ниже. Т.е. знакогенератор для Плоскостей и для Спрайтов один и тот же. Так же, при указании размера спрайта отличного от 1х1, следующая цепочка соседних символов знакогенератора будет использована:





§ 11 ПРИОРИТЕТ

Приоритет может быть назначен Спрайтам, Плоскости “A” и Плоскости “B”.

Приоритет может быть назначен любому символу битом приоритета (PRI). Его можно установить каждому Спрайту или отдельному символу любой плоскости (“A” или “B”). При этом, у Фона приоритет всегда самый низкий. Комбинации приоритетов даны ниже:

S pri
A pri
B pri
Приоритет
0
0
0
S>A>B>G
1
0
0
S>A>B>G
0
1
0
A>S>B>G
1
1
0
S>A>B>G
0
0
1
B>S>A>G
1
0
1
S>B>A>G
0
1
1
A>B>S>G
1
1
1
S>A>B>G

S : Спрайты.
A : Плоскость “A”.
B : Плоскость “B”.
G : Задний Фон.

Еще, комбинируя бит S/TEN в Регистре №12 и биты приоритетов, можно получить эффекты тени или подсветки.

S/TEN = 0



Выше показаны варианты приоритетов для Спрайтов, Плоскостей “A” и “B” и для Фона. Точки с кодом цвета равным 0 будут прозрачны, т.е. через них будут просвечиваться плоскости с более низким приоритетом.


S/TEN = 1
ПАЛИТРА ЦВЕТА СПРАЙТОВ 0 – 3, КОД ЦВЕТА 0 - 15
ПАЛИТРА ЦВЕТА 3, КОД ЦВЕТА 0 - 13





При S/TEN=1, когда приоритет Плоскостей “A” и “B” равен O, появится Тень(см. Палитра Цвета).

S/TEN = 1
ПАЛИТРА ЦВЕТА СПРАЙТОВ 3, КОД ЦВЕТА 15





Точки цвета Спрайта с кодом 15 работают как операторы “Тени”, для всех плоскостей с более низким приоритетом. Соответственно, эти точки не отображаются.


§ ЧЕРЕЗСТРОЧНЫЙ РЕЖИМ

Режим растра можно изменить битами LSM0 и LSM1 в Регистре №12.

LSM1
LSM0
Режим растра
0
0
Не чересстрочный (обычный) режим
0
1
В не чересстрочном режиме одно и тоже изображение появится в четном и нечетном кадре растра.
(Чересстрочный 1)
1
1
В чересстрочном режиме разные изображения появятся в четном и нечетном кадрах растра.
(Чересстрочный 2)

В “Не чересстрочном” и “Чересстрочном 1” режимах, один символ определяется матрицей в 8х8 точек, а в режиме “Чересстрочный 2” – матрица символа 8х16 точек. Для экрана, один символ будет 8х8 точек в не чересстрочном режиме и 8х16 точек в чересстрочном режиме.

В любом случае, количество символов на экране одинаково.

В чересстрочном режиме возможны размытости изображения в вертикальном направлении, поэтому будьте внимательны при использовании этих режимов.


3. РЕЖИМ ОБРАТНОЙ СОВМЕСТИМОСТИ

В случае применения режима обратной совместимости Mega Drive отличается от оригинальной системы Mark III и Master System по следующим пунктам:

_ MARK III '(MS-JAPAN) _

OS-ROM не встроен.

Карта/картридж с ПЗУ (ROM) выбирается аппаратурой так же, как и в системе Mark III. Номер стартующего слота не будет записан по адресу 0C000H. Логотип-заставка “SEGA” отображен не будет.

Звуковой FM чип не встроен.

Звуковой чип FM встроен в MS-Japan (стандартно) и Mark III (опционально) (OPLL). Однако Mega Drive не имеет опций для этого, но есть техническая возможность подключения. Считайте Японскую Спецификацию Mega Drive как Mark III с портом джойстика от MS-Japan, или как MS-Japan без звукового FM чипа и OS-ROM.

_ MASTER SYSTEM _

OS-ROM не встроен.

ОЗУ по адресам 0C000H-0DFFFH не очищается при включении питания. Ячейка ОЗУ с адресом 0C000H не имеет значения. Логотип-заставка “SEGA” отображен не будет.

Звуковой FM чип не встроен.

Звуковой FM чип встроен в MS как опция (OPLL). Однако, Mega Drive не имеет опций, хотя подключение возможно.
Рассматривайте экспортный вариант Mega Drive как Master System без ПЗУ Операционной Системы.

_ КАРТА ОЗУ _

В режиме обратной совместимости c системами Mark III и Master System в Mega Drive, Карту памяти для разработок (с динамическим ОЗУ) нельзя использовать из-за проблем с регенерацией. Другие Карты памяти для разработок (со статическим ОЗУ) можно применять без каких либо проблем.

4. СИСТЕМНЫЕ ПОРТЫ ВВОДА/ВЫВОДА

Системные порты ввода/вывода в Mega Drive находятся в сегменте $A00000, вместе с областью памяти сопроцессора Z80.

§ 1 НОМЕР ВЕРСИИ

Показывает версию аппаратуры Mega Drive’а.

Адрес
D7
D6
D5
D4
D3
D2
D1
D0
$A10000
MODE
VMOD
DISK
RSV
VER3
VER2
VER1
VER0

MODE (R ) 0 : “Домашний” вариант
1 : “Экспортный” вариант
VMOD (R ) 0 : Стандарт видеосигнала - NTSC, тактовая частота CPU - 7.67МГц
1 : Стандарт видеосигнала - PAL, тактовая частота CPU - 7.60 МГц
DISK (R ) 0 : Дисковод FDD подключен
1 : Дисковод FDD не подключен
RSV (R ) Не используется
VER3-0 (R ) Версия платы Mega Drive, значения от $0 до $F.
Настоящая версия имеет значение $0

§ 2 ПОРТ ВВОДА/ВЫВОДА

У Mega Drive есть три порта ввода/вывода. Они обозначены как CTRL1, CTRL2 и EXP. Все порты одинаковы по функциональности, но отличаются разъемами. У каждого порта есть несколько регистров управления:

Порт
Режим
Описание
DATA
чтение/запись
Данные параллельного порта
CTRL
чтение/запись
Управление параллельным портом
S-CTRL
чтение/запись
Управление последовательным портом
TxDATA
чтение/запись
Данные передатчика последовательного порта
RxDATA
чтение
Данные приемника последовательного порта

Взаимодействия регистров последовательного и параллельного портов:



I/O : Переключение на ввод/вывод
P/S : Переключение режима параллельный/последовательный
INT : Управление прерыванием от порта
S>P : Преобразователь последовательного кода в параллельный
P>S : Преобразователь параллельного кода в последовательный

Адреса портов

Адрес
Регистр
Порт
$A10003
DATA
( CTRL 1)
$A10005
DATA
( CTRL 2)
$A10007
DATA
( EXP )
$A10009
CTRL
( CTRL 1)
$A1000B
CTRL
( CTRL 2)
$A1000D
CTRL
( EXP )
$A1000F
TxDATA
( CTRL 1)
$A10011
RxDATA
( CTRL 1)
$A10013
S-CTRL
( CTRL 1)
$A10015
TxDATA
( CTRL 2)
$A10017
RxDATA
( CTRL 2)
$A10019
S-CTRL
( CTRL 2)
$A1001B
TxDATA
( EXP )
$A1001D
RxDATA
( EXP )
$A1001F
S-CTRL
( EXP )

Обращение к порту может быть побайтным или словами (WORD). Во втором случае только младшие 8 бит имеют значение.

Регистр DATA отображает состояние порта. Направление ввода/вывода может быть установлено для каждого бита в отдельности в регистре CTRL и S-CTRL.


D7
D6
D5
D4
D3
D2
D1
D0
DATA
PD7
PD6
PD5
PD4
PD3
PD2
PD1
PD0

Бит
Режим
Назначение разряда для джойстика
PD7
чтение/запись
Не используется
PD6
чтение/запись
SYN
PD5
чтение/запись
B/C
PD4
чтение/запись
A/Старт
PD3
чтение/запись
Вправо
PD2
чтение/запись
Влево
PD1
чтение/запись
Вниз
PD0
чтение/запись
Вверх

Регистр CTRL определяет режим работы линий данных (ввод или вывод) и управляет маской запроса прерывания от внешних устройств.


D7
D6
D5
D4
D3
D2
D1
D0
CTRL
INT
PC6
PC5
PC4
PC3
PC2
PC1
PC0

INT (ч/з) 0 : Прерывание по сигналу линии SYN запрещено.
1 : Прерывание по сигналу линии SYN разрешено.
Прерывание происходит при низком уровне сигнала (лог. 0) на линии SYN.
PC6 (ч/з)0 : Линия данных “SYN” в режиме ввода.
1 : Линия данных “SYN” в режиме вывода.
PC5 (ч/з)0 : Линия данных “B/C” в режиме ввода.
1 : Линия данных “B/C” в режиме вывода.
PC4 (ч/з)0 : Линия данных “A/Старт” в режиме ввода.
1 : Линия данных “A/Старт” в режиме вывода.
PC3 (ч/з)0 : Линия данных “Вправо” в режиме ввода.
1 : Линия данных “Вправо” в режиме вывода.
PC2 (ч/з)0 : Линия данных “Влево” в режиме ввода.
1 : Линия данных “Влево” в режиме вывода.
PC1 (ч/з)0 : Линия данных “Вниз” в режиме ввода.
1 : Линия данных “Вниз” в режиме вывода.
PC0 (ч/з)0 : Линия данных “Вверх” в режиме ввода.
1 : Линия данных “Вверх” в режиме вывода.

Регистр S-CTRL используется для определения состояния последовательного порта и установки его режимов.


D7
D6
D5
D4
D3
D2
D1
D0
S-CTRL
BPS1
BPS0
SIN
SOUT
RINT
RERR
RRDY
TFULL

SIN (ч/з) 0 : Линия “B/C” в составе параллельного порта.
1 : Линия “B/C” в составе последовательного порта как вход приемника.
SOUT (ч/з) 0 : Линия “A/Старт” в составе параллельного порта.
1 : Линия “ A/Старт” в составе последовательного порта как выход передатчика.
RINT (ч/з) 0 : Прерывание по готовности приемника (Rxd) запрещено.
1 : Прерывание по готовности приемника (Rxd) разрешено.
RERR (ч) 0 : Ошибок приема нет (Rxd).
1 : Ошибка приема (Rxd).
RRDY (ч) 0 : Приемник занят/принимает данные (Rxd).
1 : В приемнике есть данные/приемник готов (Rxd).
TFUL (ч) 0 : Передатчик свободен/очередь передатчика пуста (Txd).
1 : Передатчик занят/очередь передатчика полна (Txd).

BPS1
BPS0
Скорость (bps)
0
0
4800
0
1
2400
1
0
1200
1
1
300

РЕЖИМ ПАМЯТИ

Mega Drive способен вырабатывать сигнал “Регенерация” для использования более дешевой и ёмкой динамической памяти (ОЗУ). Это используется для картриджа разработчика. В случае использования картриджа разработчика с динамической памятью, нужно включить режим “Динамическое ОЗУ”. Если используется ПЗУ (ROM) – нужно включить режим “ПЗУ”

Только Бит D8 по адресу $A11000 используется, и только в режиме записи.
$A11000 D8 (запись) 0 : Режим “ПЗУ”, генерация сигнала “Регенерация” отключена.
1 : Режим “Динамическое ОЗУ”, генерация сигнала “Регенерация” включена.

Доступ к регистру можно осуществить и побайтно.

§ 4 УПРАВЛЕНИЕ СОПРОЦЕССОРОМ Z80

_ ЗАХВАТ ШИН Z80 _

Когда главный CPU (M68000) хочет получить доступ к адресному пространству Z80, сначала надо захватить шины. Для этого надо записать в регистр $A11100 в бит D8 единичку. Потом подождать, пока Z80 не освободит шины. При включении питания CPU может беспрепятственно обращаться к области Z80.

$A11100 D8 (запись) 0 : Отмена сигнала запроса захвата шин (BUSREQ).
1 : Запрос на захват шин (BUSREQ).
D8 (чтение) 0 : Z80 освободил шины и доступ его ресурсам разрешен.
1 : Z80 работает, доступ к ресурсам Z80 запрещен.

Алгоритм захвата шин сопроцессора Z80:

Шаг
Действия
1
Записать слово $0100 по адресу $A11100
2
Повторять шаг 2, пока бит D8 не станет равным 0
3
Обращаться к ресурсам Z80 (запись программы, обращение к YM2612 и т.д.)
4
Записать слово $0000 по адресу $A11100

Обращаться к регистру $A11100 можно и побайтно, в этом случае бит D8 становится D0.

_ СБРОС Z80 _

CPU 68000 может инициировать сброс сопроцессора Z80. Z80 автоматически сбрасывается при включении питания.
$A11200 DS ( W) O: Запрос на сброс сопроцессора
1 : Отмена сброса

Обращаться к регистру $A11100 можно и побайтно.

• От переводчика:
• На самом деле, при включении питания, регистр $A11200 обнулен, что приводит к “вечной” перезагрузке сопроцессора. В
отличии от процессоров x86, это состояние абсолютно безопасно для Z80. Более того, в этом режиме он потребляет
минимальное количество энергии. Так же, при постоянной перезагрузке Z80, захватывать шины не обязательно, т.к. Z80
сам освобождает шины в состоянии перезагрузки. Все это работает на реальной приставке, и может не поддерживаться
эмуляторами. Поэтому, рекомендуется придерживаться стандартного алгоритма.

§5 РЕСУРСЫ Z80

Сопроцессор Z80 может работать автономно. После захвата шин, ресурсы Z80 становятся доступны по адресу $A00000.
Карта ресурсов Z80 дана ниже:



_ ОЗУ Z80 _

Здесь хранится программа для Z80 (звуковой драйвер). Для доступа к этой области используйте байтовые операции.

_ ЗВУКОВОЙ ЧИП _

Эта область отведена для звукового чипа YM 2612. При доступе к нему от CPU 68000, используйте байтовые операции.

_ РЕГИСТР ПЕРЕКЛЮЧЕНИЯ БАНКА _

Доступ процессора Z80 к ресурсам CPU 68000 основано на переключении банка (куска адресного пространства). Один банк занимает старшие 32Кбайта в ресурсах Z80. В регистр переключения заносится номер требуемого банка. Всего их 512 ($000-$1FF, 512*32Кб=16384Кб=16Мб). Этот регистр можно установить и со стороны Z80, и со стороны 68000. Доступ к банку со стороны Z80 будет по адресам $8000-$FFFF. Доступ к банку со стороны 68000 будет по адресам $A08000-$A0FFFF. Не рекомендуется использовать доступ к банку со стороны 68000.

• От переводчика:
• На самом деле, из-за упрощения схемы, при попытке чтения банка со стороны 68000, считывается “висячка” шины.

МЕТОД УСТАНОВКИ БАНКА

При доступе к ресурсам 68000, Z80 использует систему переключающихся банков. Номер банка устанавливается записью 9 раз в регистр. Эти 9 бит дополнят биты адреса 68000 (15 – 23):



5. РАСПРЕДЕЛЕНИЕ VRAM

В видеобуфере VRAM хранятся таблицы символов и знаковые генераторы. Адреса знаковых генераторов (для Спрайтов и Плоскостей) фиксированы, и равны 0000H. Однако, адреса остальных таблиц можно свободно менять через регистры VDP. Еще, области могут перекрываться, например, одна таблица может использоваться и для Плоскости, и для Окна.

ТАБЛИЦА СИМВОЛОВ ПЛОСКОСТИ ПРОКРУТКИ “A” максимально 8Кбайт.
Базовый адрес устанавливается в Регистре №2.
ТАБЛИЦА СИМВОЛОВ ПЛОСКОСТИ ПРОКРУТКИ “B” максимально 8Кбайт.
Базовый адрес устанавливается в Регистре №4.
ТАБЛИЦА СИМВОЛОВ ОКНА варьируется от количества символов по горизонтали.
Базовый адрес устанавливается в Регистре №3.
ТАБЛИЦА ГОРИЗОНТАЛЬНОЙ ПРОКРУТКИ 1Кбайт.
Базовый адрес устанавливается в Регистре №13.
ТАБЛИЦА АТРИБУТОВ СПРАЙТОВ Варьируется от количества символов по горизонтали.
Базовый адрес устанавливается в Регистре №5.
ЗНАКОВЫЙ ГЕНЕРАТОР ПЛОСКОСТЕЙ
Базовый адрес фиксирован: 0000H.
ЗНАКОВЫЙ ГЕНЕРАТОР СПРАЙТОВ
Базовый адрес фиксирован: 0000H.

Отведен 1Кбайт для таблицы горизонтальной прокрутки, но она занимает 896 байт в режиме 28 символов по вертикали и 980 байт в режиме 30 символов по вертикали. Отведено 2Кбайта для таблицы символов Окна в режиме 32 символа по горизонтали и 4Кбайта в режиме 40 символов по горизонтали (см. Окно). Отведено 512 байт под таблицу атрибутов Спрайтов в режиме 32 символа по горизонтали и 1Кбайт в режиме 40 символов по горизонтали. Однако для отображения требуется всего 640 байт в режиме 40 символов по горизонтали.

Примеры программирования режима

1 32 символа по горизонтали

Таблица символов Плоскости “A”
8Кбайт с адреса 0C000H : Регистр №2 = $30
Таблица символов Плоскости “B”
8Кбайт с адреса 0E000H : Регистр №4 = $07
Таблица символов Окна
2Кбайта с адреса 0B000H : Регистр №3 = $2С
Таблица горизонтальной прокрутки
1Кбайт с адреса 0B800H : Регистр №13 = $2E
Таблица атрибутов спрайтов
512 байт с адреса 0BE00H : Регистр №5 = $5F

Нераспределенная область (ниже 0B000H) используется для знакогенераторов Плоскостей и Спрайтов.





2 40 символов по горизонтали

Таблица символов Плоскости “A”
8Кбайт с адреса 0C000H : Регистр №2 = $30
Таблица символов Плоскости “B”
8Кбайт с адреса 0E000H : Регистр №4 = $07
Таблица символов Окна
2Кбайта с адреса 0B000H : Регистр №3 = $2С
Таблица горизонтальной прокрутки
1Кбайт с адреса 0AC00H : Регистр №13 = $2B
Таблица атрибутов спрайтов
1Кбайт с адреса 0A800H : Регистр №5 = $54

Нераспределенная область (ниже 0AB00H) используется для знакогенераторов Плоскостей и Спрайтов.



ОСОБЕННОСТИ ПРОГРАММИРОВАНИЯ ДЛЯ MS (MASTER SYSTEM)

Когда программируете для MS, обратите внимание на следующие особенности:

1. Программа обслуживания DMA (для RAM, ROM-VRAM, CRAM, VSRAM) должна быть расположена в ОЗУ, или, например, быть как в листинге LIST1. Однако, в некоторых случаях, нельзя использовать обращение двойным словом для установки последнего адреса VRAM.

2. Код ID (заголовок РОМа) должен быть как показано ниже.

3. Примените листинг LIST2 в начале вашей программы. Это нужно для систем U.S.

LIST1

DMA_RAM:
lea vdp_cmd,An ;vdp_cmd : $COOOOO
;An = Регистр адреса
;Установка адреса оригинала в регистры VDP
;Установка длинны области копирования в регистры VDP
move.l xx,ram0 ;xx : Адрес копии
;ram0 : Рабочее ОЗУ
move.w ram0,(An)
move.w ram0+2,(An) ;Будьте внимательны к последовательности записей 1ого слова и второго
rts ;Адрес копии должен быть установлен как
;два слова (WORD) а не двойное слово (LONG WORD).

• От переводчика:
• Проблемы с DMA связаны с расположением последней команды в памяти. Условие такое – она должна располагаться по
четному адресу – аппаратура приставки устроена так, что чтение из ПЗУ возможно только словами (WORD). . Для ОЗУ
этой проблемы нет.

LIST 2

move.b $A10001,d0 ;Получить номер версии
andi.b #$0F,d0 ;
beq.b ?0 ;Если версия не $0
move.l $'SEGA',$A14000 ;Записать строку ASCII в регистр безопасности
?0:

ЗАГОЛОВОК КАРТРИДЖА ПЗУ (ROM) ДЛЯ MEGA DRIVE

Поместите в ПЗУ картриджа по адресу 100H-1FFH.

Адрес
Длинна (байт)
Значение
Описание
100H
16
‘SEGA MEGA DRIVE’
Имя системы Sega Mega Drive.
110H
16
“(C)SEGA 1988 JUL’
Права и дата выпуска системы
120H
48
Название игры (внутр)
Название игры для страны-производителя (внутреняя)
150H
48
Название игры (заруб)
Название игры для остальных стран (внешняя)
180H
14
‘GM-XXXXXXX-XX’
Тип картриджа, номер продукта и версия
Тип : Игра = ‘GM’, Обучающий = ‘AI’
Номер : Номер продукта
Версия : Версия программы или отличия
18EH
2
$XXXX
Контрольная сумма защищенной области
190H
16
Данные управления
Данные использованных устройств ввода/вывода:
Джойстик для Master System : 0
Планшет (Tablet) : T
Джойстик : J
Шар управления : B
Клавиатура : K
“Подушка” : V
Принтер : P
CD-ROM : C
1A0H
8
$000000, $XXXXXX
Размер ПЗУ:
Начальный адрес (всегда = 0)
Конечный адрес
1A8H
8
$FF0000, $FFFFFF
Используемое ОЗУ:
Начальный адрес (всегда = $FF0000)
Конечный адрес (всегда = $FFFFFF)
1B0H
12
Данные внешнего ОЗУ
Если нет внешнего ОЗУ, заполнить кодом пробела ($20):
1B0H dc.b ‘RA’
1B2H dc.b %1x1yz000
1B3H dc.b %00100000
x : 1 для энергонезависимой, 0 для обычной
y,z : 10 для четных адресов, 11 для нечетных адресов
00 для всех адресов (16 битное ОЗУ)
1B4H dc.l $XXXXXX : Адрес начала ОЗУ
1B8H dc.l $XXXXXX : Адрес конца ОЗУ
1BCH
12
Данные модема
Если не используется модем, заполнить пробелом ($20)
1BCH dc.b ‘MO’
1BEH dc.b ‘xxxx’
1C2H dc.b ‘yy.z’
xxxx : Фирменное имя
yy : Номер модема
z : Версия
1C8H
40
Записки
Произвольный текст
1F0H
16
Страна выпуска
Страны, в которых возможен выпуск продукта:
Япония : J
США : U
Европа : E

Обязательно заполняйте этот заголовок корректно, иначе на некоторых системах программа не будет работать.

• От переводчика:
• Заголовок актуален только для систем, со встроенной Операционной Системой (во встроенной ПЗУ). В обычных приставках
Mega Drive и Mega Drive 2 такого ПЗУ нет, поэтому заголовок не несет никакой функции.
Однако, всегда заполняйте заголовок полностью и правильно, это позволит программам-каталогизаторам
идентифицировать вашу программу (утилиты GoodXXX) и не возникнет путаницы. Еще, это считается хорошим тоном.

КАК ПОСЧИТАТЬ КОНТРОЛЬНУЮ СУММУ

Контрольная сумма считается следующим образом. Сначала место, занимаемое программой, заполните кодом ($FF). Затем загрузите все свои программы по адресам расположения (а фактически – будущий ROM) и программу подсчета контрольной суммы в ОЗУ по адресу $FF8000. Запустите программу в ОЗУ с адреса $FF8000. Через некоторое время программа остановится и младшее слово в регистре d0 (младшие 16 бит) и будут контрольной суммой. Перед прожигом будущего ПЗУ, сначала место объемом будущего ПЗУ заполните кодом $FF.

end_addr equ $1A4
org -$8000
start: move.l (a0),d1
addq.l #$1,d1
movea.l #$200,a0
sub.l a0,d1
amr.l s1,d1 ;счетчик
move d1,d2
subq.w #$1,d2
swap d1
moveq #$0,d0
?l2: add (a0)+,d0
dbra d2,?l2
dbra d1,?l2
nop
nop
nop
nop
nop
nop
?le: nop
nop
bra.b ?Ie

РАСПРЕДЕЛЕНИЕ ПАМЯТИ ДЛЯ ЭМУЛЯЦИИ

Для эмуляции процессора 68000

Все адреса по началу следует отключить: от $0 до $FFFFFF

Затем, следует включить следующие области:

1. Программа и данные по адресам $000000 по $7FFFFF
2. Статическое ОЗУ для Z80 по адресам с $A00000 по $A01FFF
3. Звуковой FM чип по адресам с $A04000 по $A04FFF
4. Порты ввода/вывода и управление сопроцессором Z80 с $A10000 по $A11FFF
5. Видеоконтроллер VDP и звуковой порт по адресам с $C00000 по $C00FFF
6. Статическое ОЗУ по адресам с $FF0000 по $FFFFFF

КАРТА ОЗУ (№ 171-5642-02)

Это устройство имеет две области:

1 : Основное динамическое ОЗУ с $000000 по $0FFFFF
2 : Энергонезависимое статическое ОЗУ с $200000 по $203FFF

1. Инициализация
Записать слово 0100H по адресу $A11000.
Записать 0FFH по адресу $A130F0.
Зажгется зеленый светодиод.

2. Защита от стирания/записи
Записать 03H по адресу $A130F0.
Зажгется красный светодиод.

3. Запись и чтение
Записать 01H по адресу $A130F0.
Красный светодиод погаснет.

4. Примечание: Доступ эмулятора к этим портам нужно разрешить перед записью, а затем запретить.
















ЗВУКОВАЯ СИСТЕМА GENESIS

РУКОВОДСТВО ПРОГРАММИСТА



СОДЕРЖАНИЕ

I. Окружение Z80
(1) Карта памяти Z80
(2) Прерывания

II. Контроль 68K за Z80
(1) Инициализация/старт Z80
(2) Обмен с Z80

III. Управление чипом FM
(1) Доступ к чипу от 68K
(2) Доступ к чипу от Z80

IV. Управление PSG

V. Управление D/A

Здесь рассматривается распределение памяти и пути доступа к ресурсам.
Чип генератора FM и PSG объяснены в других документах.

I. Окружение Z80

(2) Карта памяти Z80

Память показана справа.
Порты I/O содержатся в карте памяти.

1) Место программы
Программа для Z80 хранится по адресам от 0 до 1FFFH, это S-RAM, т.е. статическая.

• От переводчика:
• Адреса с $2000 по $3FFF – фантом S-RAM, т.е. обращение к 2000H эквивалентно обращению к 0H.
• Скорее всего можно увеличить память Z80 вдвое (установить микросхему на 16Кб).

2) Банк доступа к ресурсам 68К
По адресам 8000H - FFFFH можно получить доступ к любым ресурсам 68K.
Процессор Z80 получает доступ ко ВСЕЙ области памяти 68K банками по 32Кб. Номер банка дополняет
младшие адреса Z80 до полного адреса 68К. Номер банка использует адреса с A15 до A23. Необходимо
записать эти 9 бит по одному в адрес 6000H последовательно, байтами.





3)I/O
4000H FM1 выбор регистра (Каналы 1-3)
4001H FM1 Данные

4002H FM2 выбор регистра (Каналы 4-6)
4003H FM2 Данные

Адрес PSG = 7F11H.

(2) Прерывание

У Z80 происходит только 1 прерывание – по кадровому гашению.

Прерывание с периодом 16ms (60Hz) для NTSC и 20ms (50Hz) для PAL. Длинна - 64mks (1 строка).

II Управление Z80-м со стороны 68K

(1) Инициализация и запуск Z80
Последовательностьзапуска Z80.

(1) Запросить шины Z80 (BUS REQ ON)
(2) Снять сигнал сброса Z80 (BUS RESET OFF)
(3) Копировать программу для Z80 программой 68K в ОЗУ Z80
(4) Установить сброс Z80 (BUS RESET ON)
(5) Освободить шины Z80 (BUS REQ OFF)
(6) Снять сигнал сброса Z80 (BUS RESET OFF)

Захват шин Z80

Захватить шины (BUS REQ ON)
Данные 0100H (WORD) -> $A111O0

Освободить шины (BUS REQ OFF)
Данные 0000H (WORD) -> $A111O0


Сброс Z80
• Включить сброс (RESET ON)
Данные 0000H (Word) -> $A11200

• Выключить сброс (RESET OFF)
Данные 0100H (Word) -> $A11200

Период сброса не менее 26ms.
FM инициализируется тоже.



Подтверждение освобождения шин Z80

Информация из адреса $A11100 бит 0

0 - Z80 работает, шины не доступны

1 - 68K можно обращаться к шинам Z80



• От переводчика:
• На самом деле можно считывать данные даже тогда, когда Z80 не освободил шины, просто результат не гарантирован.

(2) Подтверждение Z80
При доступе по адресам A00000H - A07FFFH надо обязательно использовать захват шин Z80.
Доступ 68K к памяти Z80 происходит по байтам.

III. Управление чипом FM
(1) Доступ к чипу 68K.
При доступе к чипу FM, 68K должен использовать захват шин Z80, т.к. это владения Z80.

(2) Доступ к чипу Z80.
Z80 нормально контролирует FM чип по адресам 4000H - 4003H.

IV. Управление PSG

PSG принимает команды и от 68K и от Z80 в любое время, в любой конфигурации. Но для достижения
Осмысленных результатов надо координировать доступы к PSG обоих процессоров.
PSG доступен по адресам: $C00011 для 68K, и 7F11H для Z80.



Обзор

Звуковой чип “Yamaha 2612 Frequency Modulation (FM)” основан на чипе “Yamaha 2151” (использовался на игровых автоматах Sega) и использует алгоритмы/методы синтеза звука от фирмы Yamaha.

Этот чип способен:

-- 6 стереоканалов звуковых FM синтезаторов
-- 8-ми битный ЦАП для оцифрованного звука
-- Один LFO (low frequency oscillator – низкочастотный генератор) для искажения звуков FM
-- 2 таймера для использования программой.

Для более понятного определения: канал FM синтезатора может довольно реалистично повторить одиночную ноту большинства инструментальных голосов. Эффект хоруса получается использованием нескольких FM каналов.

Стандартный канал FM имеет одну основную частоту (тон) и данные для метода преобразования этой частоты в сложный комплексный сигнал (голос). Это преобразование использует четыре внутренних компонентов канала, называемых “операторы”, каждый из которых обладает своей частотой (вариантом основной частоты), огибающую и возможность модулировать свой вход используя частоту и огибающую. Частота оператора смещена на кратные множители от основной частоты (гармоники).

Есть 2 банка по 3 FM канала в каждом, пронумерованные с 1 по 3 и с 4 по 6. Каналы 3 и 6, последние в каждом банке, могут использовать полностью раздельные частоты для каждого оператора, даже если они и не кратны множителям (не гармоничны). Это применимо для синтеза ударных инструментов, у которых гармоника имеет нечетные множители, например 1.4 или 1.7 от основной.

8-ми битный ЦАП заменяет 6-ой FM канал, это означает, что ЦАП полностью выключает 6-ой FM канал. К сожалению, все временные интервалы должны выполняться программой (например, частота дискретизации) - это означает, что программа должна быть очень грамотно спланирована, так как невозможно одновременно использовать и FM каналы и ЦАП одновременно.



Любой из FM каналов или DAC можно независимо панорамировать в левый канал, в правый канал или в оба канала. Стереозвучание доступно только через гнездо наушников.

• От переводчика:
• На большинстве приставок MegaDrive 2 на AV выход подается монофонический звук (смешанный) и два канала раздельно (левый и правый). Если применить соответствующий штекер, стереозвук можно вывести на усилитель. Исключение составляют приставки последних выпусков – они сделаны по сокращенной схеме, и стереозвук можно вывести только вмешавшись во внутреннюю схему приставки.

Низкочастотный генератор (LFO или Low Frequency Oscillator) позволяет изменять амплитуду или частоту звуков FM каналов. Каждый канал может выбирать глубину изменений функцией LFO, если это используется. Это может быть использовано, например, в гитарном соло.

Наконец, есть еще два таймера, которые может использовать программа Z80 в альтернативу к прерыванию VBLANK. К сожалению, эти таймеры не могут выработать прерывание – их надо проверять программно, для определения окончания их счета.

• От переводчика:
• На самом деле у чипа YM2612 есть вывод, который генерирует сигнал по окончании счета одного или обоих таймеров. Это ножка 13. Просто, по какой-то причине, разработчики приставки не использовали его.

Немножко о “Операторах”

Есть четыре специальных оператора, назначенных за каждым каналом, со следующими свойствами:

-- Оператор, у которого есть вход, частота и огибающая. Изменяет вход и выход.
-- Операторы бывают двух типов, первые свой выход (результат) отдают следующему оператору, вторые
суммируются с конечным результатом. Последние называют “слотом” (“slot”).
-- Слоты могут быть включены независимо, хотя программы Seg’и их включает и выключает всегда
одновременно.
-- Оператор 1 может иметь обратную связь с самим собой, и в результате получить более сложный сигнал.

Эти операторы могут быть применены в восьми разных конфигурациях, называемых “алгоритм”. Схема вариантов дана на следующей странице.





Соответствие алгоритмов и получаемых звуков:
Алгоритм 0 – гитара с “дисторшн”, тарелки, (?) бас
Алгоритм 1 -- арфа, меандр (PSG - programmable sound generator)
Алгоритм 2 -- бас, электрогитара, духовые инструменты, фортепьяно, деревянные духовые
Алгоритм 3 – струнные инструменты, акустическая гитара, колокола
Алгоритм 4 -- флейта, колокольчики, хорус, бас-бочка, рабочий барабан, том
Алгоритм 5 – духовые инструменты, орган
Алгоритм 6 – ксилофон, том, орган, вибрафон, рабочий барабан, бас-бочка
Алгоритм 7 – большой орган

Обзор регистров

Звуковой чип содержит большое количество регистров. Основные системные:

-- значение таймера и его состояние, используется программно
-- разрешение LFO и его частота. для изменения FM каналов
-- разрешение ЦАП и амплитуда
-- разрешение для каждого из 6 FM каналов в отдельности
-- количество используемых частот каналами 3 и 6. Обычно канал FM имеет одну основную частоту, но для
каналов 3 и 6 можно выбрать четыре, одна для каждого оператора.

Остальные регистры действуют только на один FM канал или на оператор в канале. Это следующие регистры:

-- номер частоты (в обычном случае) – номер алгоритма
-- степень обратной связи в операторе 1
-- тип вывода, на левый, правый или оба канала. Можно услышать только через выход наушников.
-- степень искажения сигнала канала генератором низкой частоты (LFO).

Остаются только регистры управления операторами. Связи операторов определяются выбранным алгоритмом, но огибающая всегда задается отдельно для каждого оператора. В случае с 3 и 6 FM каналами, частота может быть определена для каждого оператора отдельно.



Спецификация огибающей



Звук начинается после нажатия на клавишу, процесс назван “key on”. Звук имеет “атаку”, сильное основное затухание, потом медленное вторичное затухание. Звук будет продолжаться до тех пор, пока клавиша не будет отпущена. Этот процесс назван “key off”. После, звук резко затухает до полного исчезания звука, это как у рояля, после отпускания клавиши, демпфер резко опускается на струны и заглушает их.

Огибающая представлена амплитудой и углами, а так же несколькими регистрами. Значения на диаграмме:

TL -- Общая амплитуда (Total Level), наивысшая амплитуда сигнала
AR -- Скорость атаки (Attack Rate), угол, который задает начальное увеличение амплитуды. Его можно сделать
очень крутым, если надо. Проблема медленной атаки в том, что если нота слишком короткая, состояние
отпускания клавиши (key off) может произойти прежде, чем амплитуда достигнет нужного результата.
D1R -- Угол сильного основного затухания
T1L -- Амплитуда с которой начинается медленное вторичное затухание
D2R -- Угол вторичного медленного затухания. Будет продолжаться до события “key off”.
RR -- Последний угол конечного затухания после события “key off”.


Дополнительные регистры:

RS -- Масштабирование скорости (Rate Scaling). Степень, которая указывает на сколько короче становится
огибающая на более высоких частотах. Например, на рояле высокие ноты затухают быстрее, чем нижние.
AM -- Включение амплитудной модуляции (Amplitude Modulation), будет ли изменен этот оператор на LFO или
нет. Амплитуда слотов (серые на диаграме выше) будет изменятся по громкости, изменение амплитуды
других операторов может привести к разным результатам.

SSG-EG -- частный регистр, назначение которого неизвестно. Установите в 0.




Чип FM-2612 доступен и со стороны 68000 и со стороны Z80. В обоих случаях, шина всего 8 бит.

Чип FM-2612 доступен по адресам 4000H - 4003H в адресном пространстве Z80, или по адресам A04000H - A04003H в адресном пространстве 68000. Далее будут использованы значения с 4000H до 4003H.

Внутренние регистры чипа FM-2612 делятся на:





Доступ к регистрам 1 части осуществляется так: 8-ми битный адрес регистра (его номер) записывается по адресу 4000Н, а доступ к данным через 4001Н. Для доступа ко второй части используется адреса 4002Н для адреса и 4003Н для данных.

ВНИМАНИЕ: перед записью новых данных, надо прочитать байт из любого адреса YM-2612. Бит 7 указывает на занятость чипа. Надо ждать, пока он не станет равным 0.

ВНИМАНИЕ: в случае записи “сдвоенных” регистров, например 10-ти битный регистр таймера или 14-ти битный регистр частоты, записывайте старшую половину первой.

Чтение по любому адресу (4000Н – 4003Н):


BUSY - 1 если чип занят, 0 если свободен

OVERFLOW - 1 если таймер закончил счет и переполнился. См. Регистр 27H.

• От переводчика:
• Карта регистров была зачем-то разбита на несколько отдельных рисунков и занимала два листа. Все отдельные графики были сведены в один большой и понятный.
Регистры с 22H по 2BH доступны только по адресам 4000Н-4001Н. Регистры с 30H по B4H доступны по адресам 4000H-4001H для каналов 1..3 и по адресам 4002H-4003H для каналов 4..6 (Канал 1=4, 2=5 и 3=6).

D7
D6
D5
D4
D3
D2
D1
D0
22H
 
Вкл. LFO
Частота LFO
24H
Младший байт Таймера A
25H
 
Ст. биты Таймера A
26H
Таймер B
27H
Режим канала 3
Сброс B
Сброс A
Включить B
Включить A
Загрузка B
Загрузка A
28H
Оператор
 
Канал
29H
 
2AH
ЦАП
2BH
Вкл. ЦАП
 
 Управление каналами
30H+
 
DT1
MUL
40H+
 
TL
50H+
RS
 
AR
60H+
AM
 
D1R
70H+
 
D2R
80H+
D1L
RR
90H+
 
SSG-EG
 
A0H+
Младший байт частоты
A4H+
 
Блок
Старшие биты частоты
A8H+
Младший байт вспомогательной частоты канала 3 (6)
ACH+
 
Вспомогательный блок канала 3 (6)
Старшие биты вспомогательной частоты канала 3 (6)
B0H+
 
k
Алгоритм
B4H+
L
R
AMS
 
FMS

“+” возле номера регистра означает диапазон. Для регистров с 30H+ до 90H+ диапазон имеет 16 значений. Из них используется всего 12 (3 канала по 4 оператора). Формирование конечного регистра для диапазона 30H+ видно из таблицы:

D7
D6
D5
D4
D3
D2
D1
D0
30H+
 0
0
1
1
Оператор
Канал
Значения полей “Оператор” и “Канал”:
N
D1
D0
Оператор
Канал
0
0
0
1
1 (4)
1
0
1
2
2 (5)
2
1
0
3
3 (6)
3
1
1
4
недопустимо
Справа наглядный пример формирования конечного адреса регистра дана в виде таблицы. Серые поля – не используются. Формирование адреса для диапазонов от 40H+ до 90H+ происходит аналогично.
Диапазоны с A0H+ по B4H+ используют 3 комбинации из 4. Для A0H+ это будет:

D7
D6
D5
D4
D3
D2
D1
D0
A0H+
 1
0
1
0
0
0
Канал
Исключение составляют диапазоны A8H+ и ACH+. Примеры показаны ниже:







Обзор регистров:

Регистр 22H - LFO
LFO – Низкочастотный генератор (Low Frequency Oscillator).

LFO Вкл - 1 для включения, 0 для выключения.

Частота LFO задается кодом из 3-х бит:

Код (биты D2,D1,D0)
0
1
2
3
4
5
6
7
Гц
3,98
5,56
6,02
6,37
6,88
9,63
48,1
72,2

LFO используется для искажения звуков FM по амплитуде и фазе. Чтобы включить надо:
A) Включить глобально в регистре 22H;
B) Глубина модуляции в регистрах B4H-B6H;
C) Включить амплитудную модуляцию в регистрах 60H-6EH.

Если выбран LFO, включите его в регистре 22H. Затем, выберите в каких каналах он будет действовать, на какую глубину и каким методом (по амплитуде или фазе) установив регистры B4H - B6H. Наконец, если требуется изменение по амплитуде, удостоверьтесь, что оно установлено только на “слотах” в регистрах 60H - 6EH.

Регистры 24H и 25H – Таймер A


Регистр
D7
D6
D5
D4
D3
D2
D1
D0
24H
Младший байт
25H
Не используется
Старшие биты


Регистры 24H и 25H объединены в 10-ти битный таймер A. Порядок записи должен быть таким: сначала записать число в регистр 24H, затем в регистр 25H. Период срабатывания считается по формуле:

18 * (1024 - Таймер A) в микросекундах

Таймер A – все 1 -> 18 µs = 0.018 ms

Таймер A – все 0 -> 18,400 µs = 18.4 ms

Регистр 26H – Таймер B

8-ми битный таймер B. Формула:

288 * (256 – Таймер B ) microseconds

Таймер B = все 1 -> 0.288 ms
Таймер B = все 0 -> 73.44 ms


Регистр 27H

Регистр
D7
D6
D5
D4
D3
D2
D1
D0
27H
Режим канала 3
Сброс B
Сброс A
Включение A
Включение B
Загрузка A
Загрузка B

Регистр 27H управляет таймерами A и B и режимом канала 3 (6).

Режим канала 3
D7 D6

Нормальный
0 0
Канал 3 (6) такой же как и остальные
Особый
0 1
Канал 3 (6) имеет 4 разных частоты
Недопустимо
1 X
--------



В нормальном режиме операторы канала используют смещение от целых множителей от одной частоты.
В особом режиме каждый оператор имеет собственную частоту. Частота оператора 1 канала 3 в регистрах A2H и A6H. Частоты операторов 2, 3 и 4 канала 3 в регистрах A8H и ACH, A9H и ADH, AAH и AEH соответственно.
Никто не использует таймеры, но Японской инструкции говорится:
Загрузка
1 запускает таймер, 0 останавливает его.
Включение
1 разрешает устанавливать флаг при переполнении. 0 таймер считает без установки флага.
Сброс
Запись 1 очищает флаг, запись 0 ничего не делает.

• От переводчика:
• Все-таки некоторые разработчики используют таймеры вопреки мнению автора. Один из примеров – “Sub Terrania”. Это обычно позволяет избежать зависимости темпа мелодии от режима PAL или NTSC. Это происходит потому, что единственным опорным таймером для звуковой системы является кадровое прерывание VINT. Его частота различна для PAL (50Hz) и NTSC (60Hz). Было бы правильным если разработчики Genesis подключили бы вывод 13 YM2612 на вывод 16 (NMT) Z80. Это немаскируемое прерывание, но его можно запретить внутри YM2612.
Регистр 28H – Включение/выключение ноты

Регистр
D7
D6
D5
D4
D3
D2
D1
D0
28H
Оператор
Не используется
Номер канала

4
3
2
1



Регистр используется для генерации событий "Key on" и "Key off". "Key on" это нажатие на клавишу синтезатора. "Key off" это отпускание клавиши. Последовательность извлечения ноты: 1 – установить параметры, 2 – “key on”, 3 - подождать, 4 – “key off”. Когда происходит “key off”, канал FM прекращает медленное затухание и начинает быстрое, которое описано в "RR" (Release Rate – Скорость отпускания).

При одиночной записи в регистр 28H все операторы устанавливаются одновременно для одного канала. Сега всегда устанавливает их все либо в 1 (вкл) либо в 0 (выкл). Используя особенности канала 3, наверно, возможно использовать для каждого оператора отдельную ноту, поэтому возможно включать и выключать их раздельно.

Значения битов каналов даны ниже:

D2
D1
D0
Channel
0
0
0
1
0
0
1
2
0
1
0
3
1
0
0
4
1
0
1
5
1
1
0
6

При этом, каналы 1, 2 и 3 доступны через адреса 4000H и 4001H, а каналы 4, 5 и 6 – через 4002H и 4003H.
Регистры 2AH/2BH – 8 битный ЦАП


Регистр
D7
D6
D5
D4
D3
D2
D1
D0
2AH
8 бит данных ЦАП
2BH
Включение ЦАП
не используется


В регистр 2AH записываются данные 8 бит PCM. Все тайминги (дискретизацию) должен делать процессор.

Если ЦАП включен (1 в D7 регистра 2BH), он заменяет канал 6. Только регистр канала 6 имеет значение для панорамирования ЦАП в левый/правый канал. Это регистр B4H.
Диапазон регистров 30H+ – Расстройка/Множитель


Регистры 30H+ - 90H+ все однооператорные.



D7
D6
D5
D4
D3
D2
D1
D0
30H+
 X
DT1
MUL


И DT1 (Detune - Расстройка), и MUL (Multiple - Множитель) задают частоту оператора – основную частоту в канале.

Значения MUL лежат в пределах от 0 до 15, и являются прямым множителем основной частоты, исключение составляет значение 0 – оно равно 1/2 от частоты. Итого: MUL=0 до 15 дает *1/2, *1, *2, ... *15.

DT1 дает небольшую вариацию (расстройку) основной частоты *MUL. Старший бит DT1 (бит D6 в 30H+) является знаком, а остальные два - значением.

D6
D5
D4
Множитель
0
0
0
без изменений
0
0
1
×(1+E)
0
1
0
×(1+2E)
0
1
1
×(1+3E)
1
0
0
без изменений
1
0
1
×(1-E)
1
1
0
×(1-2E)
1
1
1
×(1-3E)

Где E – малое число.
Диапазон регистров 40H+ – Общая громкость




D7
D6
D5
D4
D3
D2
D1
D0
40H+
 X
TL


TL (Total Level – Общая громкость) задает максимальную амплитуду огибающей, 0 – максимум и 127 – минимум. Изменение происходит с шагом примерно в 0.75 dB.

Чтоб сделать ноту мягче, нужно изменить только TL слотов (выходных операторов). Изменение других операторов приводит к получению вариаций ноты.
Диапазон регистров 50H+ – Масштаб скорости/Скорость атаки




D7
D6
D5
D4
D3
D2
D1
D0
50H+
 RS
X
AR

В регистрах 50H+ содержится RS (Rate Scaling – Масштаб скорости) и AR (Attack Rate – Скорость атаки). AR это начальная атака до максимального уровня TL (см. выше).

RS влияет на все скорости (AR, D1R, D2R и RR) одинаково. RS это угол нарастания и зависит от частоты (чем выше частота, тем больше угол, т.е. все процессы ускоряются).

Пять старших бит частоты (3 бита октавы т 2 бита ноты) называются KC (Key code – Код клавиши) и используются при расчете общего RS по формулам:

RS=0 -> Конечная скорость = 2 * Скорость + (KC/8)
RS=1 -> Конечная скорость = 2 * Скорость + (KC/4)
RS=2 -> Конечная скорость = 2 * Скорость + (KC/2)
RS=3 -> Конечная скорость = 2 * Скорость + (KC/1)
KC/N всегда округляется в меньшую сторону.

Так как все скорости изменяются с 0-31, то диапазон влияния RS на скорости меняется от малого (0-3) до большого (0-31).

Диапазон регистров 60H+ – Амплитудная модуляция/Первое затухание




D7
D6
D5
D4
D3
D2
D1
D0
60H+
 AM
X
D1R

D1R это скорость первого сильного затухания (см. выше). Как и все другие скорости, он зависит от RS.

AM это включение амплитудной модуляции, которая происходит генератором низкой частоты (LFO). Этот бит не действует, пока не будет включен сам генератор (LFO) и в регистре B4H+ значение AMS (Amplitude modulation sensitivity – Глубина амплитудной модуляции) не равна нулю.

Диапазон регистров 70H+ – Масштаб скорости/Скорость атаки




D7
D6
D5
D4
D3
D2
D1
D0
70H+
X
D2R


D2R это скорость второго медленного затухания, продолжающегося пока нажата клавиша.
Диапазон регистров 80H+ – Вторая амплитуда/Скорость отпускания



D7
D6
D5
D4
D3
D2
D1
D0
80H+
D1L
RR


D1L это вторичная амплитуда, которая устанавливается после первого сильного затухания. Она должна быть умножена на 8, если ее сравнивать с основной амплитудой (TL). Как и в случае с TL, чем больше число – тем меньше амплитуда (0 – максимальная).

RR это скорость отпускания. Быстрое затухание после отпускания клавиши. Все скорости это 5-ти битные числа, но здесь доступно всего 4 бита. Для соответствия, здесь используются 4 старших бита скорости отпускания, а младший бит всегда равен 1. Другими словами, умножьте на 2 и прибавьте 1.

Диапазон регистров 90H+ – Для частного использования



D7
D6
D5
D4
D3
D2
D1
D0
80H+
X
SSG-EG


Этот регистр зарезервирован, и должен быть обнулен.
Последние регистры в основном для одного канала. Каждый регистр утроен (см. выше).

Диапазон регистров A0H+, A4H+, A8H+, ACH+ - Частота и октава



D7
D6
D5
D4
D3
D2
D1
D0
A0H+
Младший байт частоты
A4H+
X
Блок
Старшие биты частоты
A8H+
Младший байт вспомогательной частоты канала 3 (6)
ACH+
X
Вспомогательный блок канала 3 (6)
Старшие биты вспомогательной частоты канала 3 (6)


Частота канала 1 в регистрах A0H и A4H.
Частота канала 2 в регистрах A1H и A5H.
Частота канала 3 в нормальном режиме (см. выше) в регистрах A2H и A6H.

Если канал 3 (6) в специальном режиме:

Частота 1 оператора канала 3 (6) в регистрах A7H и A6H
Частота 2 оператора канала 3 (6) в регистрах A8H и ACH
Частота 3 оператора канала 3 (6) в регистрах A9H и ADH
Частота 4 оператора канала 3 (6) в регистрах AAH и AEH
Частота – это 14-ти битное число, которое надо устанавливать сначала старшие биты, а затем младший байт (например, A4H потом A0H). Старшие 3 бита называются “блок”, которые дают октаву. Следующие 10 бит дают позицию в октаве, и возможна последовательность из 12 значений:


Число частоты
Значение (частота для 1 октавы)
Десятичное
Шестнадцатеричное

617
269
261,7 Гц
До
653
28D
277,2 Гц
До диез/Ре бемоль
692
2B4
293,7 Гц
Ре
733
2DD
311,1 Гц
Ре диез/Ми бемоль
777
309
329,6 Гц
Ми
823
337
349,2 Гц
Фа
872
368
370,0 Гц
Фа диез/Соль бемоль
924
39C
392,0 Гц
Соль
979
3D3
415,3 Гц
Соль диез/Ля бемоль
1037
40D
440,0 Гц
Ля
1099
44B
466,2 Гц
Ля диез/Си бемоль
1164
48C
493,9 Гц
Си


Эти числа нужно использовать в каждой октаве.
Диапазон регистров B0H+ - Обратная связь/Алгоритм



D7
D6
D5
D4
D3
D2
D1
D0
B0H+
X
Обратная связь
Алгоритм



Обратная связь – это степень возврата собственного сигнала 1-го оператора в него обратно. На схемах это отображают так:



Алгоритм – это тип взаимодействий операторов. Полную диаграмму алгоритмов смотрите выше.


Диапазон регистров B4H+ - Управление каналами/Глубина воздействия LFO



D7
D6
D5
D4
D3
D2
D1
D0
B4H+
Левый
Правый
AMS
X
FMS


Регистр B4H содержит управление каналами и глубиной воздействия LFO на сигнал.

D7 - Левый канал, 1 включен, 0 выключен.
D6 - Правый канал, 1 включен, 0 выключен.

Примечание: Стерео можно услышать только на наушниках.

AMS (Amplitude modulation sensitivity – глубина амплитудной модуляции) и FMS (Frequency modulation sensitivity – глубина частотной модуляции) это степень воздействия LFO на сигнал канала. Если LF0 выключен, этот регистр можно не устанавливать. Дополнительно, амплитудная модуляция включается на уровне оператора.

AMS
0
1
2
3
dB
0
1.4
5.9
11.8

FMS
0
1
2
3
4
5
6
7
% от полутона
0
+/- 3.4
+/- 6.7
+/-10
+/- 14
+/- 20
+/- 40
+/- 80



Тестовая программа

Вот тестовая программа начальной инициализации простой ноты "Grand Piano" (Большой Рояль)

Регистр
Значение
Комментарий
22H
0
Выключение LFO
27H
0
Нормальный режим канала 3(6)
28H
0
Выключить все каналы
28H
1

28H
2

28H
4

28H
5

28H
6

2BH
0
Выключить ЦАП
30H
71H
DT1/MUL
34H
0DH

38H
33H

3CH
01H

40H
23H
TL
44H
2DH

48H
26H

4CH
00H









Регистр
Значение
Комментарий
50H
5FH
RS/AR
54H
99H
RS/AR
58H
5FH
RS/AR
5CH
94H
RS/AR
60H
5
AM/D1R
64H
5
AM/D1R
68H
5
AM/D1R
6CH
7
AM/D1R
70H
2
D2R
74H
2
D2R
78H
2
D2R
7CH
2
D2R
80H
11H
D1L/RR
84H
11H
D1L/RR
88H
11H
D1L/RR
8CH
A6H
D1L/RR
90H
0
Обнулить
94H
0
Обнулить
98H
0
Обнулить
9CH
0
Обнулить
B0H
32H
Обратная связь/Алгоритм
B4H
C0H
Вывод на оба канала
28H
00H
Key off
A4H
22H
Установить частоту
A0H
69H
Установить частоту
28H
FOH
Key on
<Ждать>


28H
00H
Key off

Примечание:
#1 Записывать сначала адрес в 4000H или 4002H, затем данные в 4001H или 4003H.
#2 Перед записью адреса/команды ждать, пока бит D7 не станет 0 (по любому адресу из 4000H-4003H).
#3 Всегда записывать сначала старшие биты/байт, а затем младшие биты/байт.


Программируемый генератор звука (PSG)

PSG содержит четыре звуковых канала, из них 3 канала тональных и один шумовой. Каждый из каналов содержит независимый регистр управления громкостью. PSG управляется через порт 7FH.

Управление громкостью для всех каналов происходит записью следующих байт в порт 7FH:

Описание
D7
D6
D5
D4
D3
D2
D1
D0
Тоновый генератор #1:
1
0
0
1
A3
A2
A1
A0
Тоновый генератор #2:
1
0
0
1
A3
A2
A1
A0
Тоновый генератор #3:
1
0
0
1
A3
A2
A1
A0
Шумовой генератор:
1
1
1
1
A3
A2
A1
A0

A3
A2
A1
A0
Затухание
0
0
0
0
0 dB (максимальная громкость)
0
0
0
1
2 dB (чем больше затухание, тем тише звук)
0
0
1
0
4 dB
0
0
1
1
6 dB
0
1
0
0
8 dB
0
1
0
1
10 dB
0
1
1
0
12 dB
0
1
1
1
14 dB
1
0
0
0
16 dB
1
0
0
1
18 dB
1
0
1
0
20 dB
1
0
1
1
22 dB
1
1
0
0
24 dB
1
1
0
1
26 dB
1
1
1
0
28 dB
1
1
1
1
- выключен -

Пример

..Когда стартует игра Mk3, исполняется следующий код:

LD HL,CLRTB ;Таблица инициализации
LD C,PSG_PRT ;Порт PSG = 7FH
LD B,4 ;Передать четыре байта
OTIR ;Записать
(и т.д.)

CLTB defb $9F,$BF,$DF,$FF

Этот код выключает все четыре канала. Неплохо его использовать и во время нажатия на кнопку “Пауза”, чтобы не оставалось звуков во время паузы.

Частота тонального генератора


Частота задается 10-ти битным значением. Это значение уменьшается счетчиком до 0, и затем перезагружается. Поэтому, чем больше число, тем ниже частота.

Чтобы записать значение частоты в генератор, нужно записать пару байт в регистр 7FH:

Канал
Первый байт (адрес)
Второй байт (данные)

D7
D6
D5
D4
D3
D2
D1
D0
D7
D6
D5
D4
D3
D2
D1
D0
1
1
0
0
0
D3
D2
D1
D0
0
0
D9
D8
D7
D6
D5
D4
2
1
0
1
0
D3
D2
D1
D0
0
0
D9
D8
D7
D6
D5
D4
3
1
1
0
0
D3
D2
D1
D0
0
0
D9
D8
D7
D6
D5
D4

D9 - D0 – 10-ти битное значение частоты (период).

Управление генератором шума


Генератор шума использует 3 бита управления “шаблоном” шума. Бит "FB" (Обратная связь) производит периодический шум или “белый” шум:






Частота шума зависит от битов NF1 и NF0:


NF1
NF0
Источник частоты шума
0
0
Такты/2 (Высокие частоты, менее крупный)
0
1
Такты/4
1
0
Такты/8 (Низкие частоты, более крупный)
1
1
Тоновый генератор 3



Примечание: "Такты" это фиксированная частота. Она управляется генератором на кварцевом резонаторе.

Когда биты NF1 и NFO равны 1, генератор тона 3 задает тактовую частоту генератора шума. Это позволяет получить “скользящий” шум по частоте. Этот эффект, например, можно использовать для озвучивания разгона реактивного двигателя.

Чтобы записать управляющие биты в генератор шума надо записать байт по адресу порта 7FH:


D7
D6
D5
D4
D3
D2
D1
D0
1
1
1
0
0
FB
NF1
NF0