|
|
| Строка 38: |
Строка 38: |
| | | | |
| | V30 MZ имеет 20-разрядную адресную шину, 16-разрядную шину данных (вход/выход разделены). | | V30 MZ имеет 20-разрядную адресную шину, 16-разрядную шину данных (вход/выход разделены). |
| − |
| |
| | | | |
| | ===Память=== | | ===Память=== |
| Строка 1163: |
Строка 1162: |
| | |} | | |} |
| | </spoiler> | | </spoiler> |
| | + | ===Дисплей=== |
| | + | <spoiler> |
| | + | Разрешение дисплея WonderSwan равно 224х144 |
| | + | |
| | + | Дисплей WonderSwan может отображать 12 оттенков серого цвета, дисплеи WonderSwan Color и SwanCrystal способны отображать 12-битный RGB (4096 цветов). |
| | + | |
| | + | '''Дисплейные тайминги:''' |
| | + | <pre> |
| | + | 0 224 256 |
| | + | ----------------- |
| | + | 0| | | |
| | + | | | | |
| | + | | | | |
| | + | | | | |
| | + | 144|-------------- | |
| | + | 159|_________________| |
| | + | </pre> |
| | + | |
| | + | PIXCLK = 3.072MHz<br/><br/> |
| | + | HDISP = 224<br/> |
| | + | HBLANK = 32<br/> |
| | + | HTOTAL = 256<br/> |
| | + | HCLK = 12kHz (3072000 / 256)<br/><br/> |
| | + | VDISP = 144<br/> |
| | + | VBLANK = 15<br/> |
| | + | VTOTAL = 159<br/> |
| | + | VCLK = ~75.47Hz (12000 / 159)<br/> |
| | + | |
| | + | Когда контроллер дисплея обращается к памяти, процессор не приостанавливается. |
| | + | |
| | + | '''Палитры''' |
| | + | |
| | + | Видеорежим задаётся в регистре REG_DISP_MODE. В зависимости от выбранного режима используются разные данные. |
| | + | |
| | + | В монохромном режиме палитры управляются регистрами REG_PALMONO_POOL и REG_PALMONO.<br/> |
| | + | REG_PALMONO_POOL создаёт пул из 8 оттенков, из которых собираются окончательные палитры. Цвета 4-битные: 00 - самый яркий, 0Fh - самый тёмный. |
| | + | |
| | + | Регистры REG_PALMONO выбирает из пула по 4 цвета в каждую из 16 палитр. |
| | + | |
| | + | Палитры 0-3 и 8-11 не имеют прозрачности. Палитры 4-7 и 12-15 используют цвет 0 в качестве прозрачного. |
| | + | |
| | + | В цветном режиме регистры монохромных палитр игнорируются, палитры хранятся в оперативной памяти по адресу 00FE00h - 00FFFFh (1 слово на цвет, 16 цветов на палитру). |
| | + | |
| | + | Палитры в режимах цветного видео полностью игнорируют монохромные регистры палитр, вместо этого сохраняя палитры в оперативной памяти. |
| | + | |
| | + | В этих режимах палитры хранятся в оперативной памяти при 0FE00h, 1 слово на цвет, 16 цветов на палитру. В 4-цветном (2BPP) режиме 12 последних цветов каждой палитры равны цвету фона. |
| | | | |
| − | ===Дисплей=== | + | У всех палитр цвет 0 прозрачен, если не используется в качестве фона в регистре REG_BACK_COLOR |
| | + | |
| | + | Формат ввода цвета: |
| | + | * 8-11 - Red |
| | + | * 4-7 - Green |
| | + | * 0-3 - Blue |
| | + | |
| | + | '''Тайлы''' |
| | + | |
| | + | Все плитки имеют размер 8х8. Формат тайлов и их размещение в памяти зависит от режима, выбранного в REG_DISP_MODE. |
| | + | |
| | + | 4-цветные (2BPP) тайлы располагаются в ОЗУ по адресу 002000h - 003FFFh. В WonderSwan (и WonderSwan Color в режиме WS) здесь может хранится только 512 (0200h) тайлов. В цветном режиме здесь может храниться до 1024 (0400h) тайлов. Спрайты используют только первые 512 тайлов, верхние 512 тайлов могут использоваться только для фона, используя бит атрибута в записи каждой плитки. Каждый тайл занимает 16 байт. |
| | + | |
| | + | Имеется два формата хранения данных в 4-цветном тайле: |
| | + | * Planar Format - каждый байт определяет полную строку из 8 пикселей. |
| | + | * Packed Format - каждый байт содержит все биты для 4 пикселей строки. Чётные байты определяют левые пиксели, нечётные - правые |
| | + | |
| | + | 16-цветные (4BPP) тайлы располагаются в ОЗУ, начиная с 004000h, и здесь может храниться до 1024 (0400h) тайлов. Спрайты используют только первые 512 тайлов, верхние 512 тайлов могут использоваться только для фона, используя бит атрибута в записи каждой плитки. Каждый тайл занимает 32 байта. |
| | + | |
| | + | Имеется два формата хранения данных в 16-цветном тайле: |
| | + | * Planar Format - каждый байт определяет полную строку из 8 пикселей. |
| | + | * Packed Format - каждый байт содержит все биты для 2 пикселей строки. Байты по порядку определяют крайние левые пиксели, центральные левые, центральные правые, крайние правые. |
| | + | |
| | + | '''Фоновые слои''' |
| | + | |
| | + | WonderSwan имеет два фоновых слоя: BG (background, также SCR1) и FG (foreground, также SCR2). BG всегда ниже FG. |
| | + | |
| | + | FG имеет функцию окна, которая настраивается с помощью регистра REG_SCR2_WIN |
| | + | |
| | + | Расположение тайловых карт в памяти настраивается при помощи регистра REG_MAP_BASE |
| | + | |
| | + | Каждый тайл в карте определяется 16-битным словом: |
| | + | * 15 - отражение по вертикали |
| | + | * 14 - отражение по горизонтали |
| | + | * 13 - тайловый банк (только для WSC) |
| | + | * 9-12 - палитра |
| | + | * 0-8 - плитка |
| | + | |
| | + | Фоны могут использовать все 16 палитр |
| | + | |
| | + | '''Спрайты''' |
| | + | |
| | + | Одновременно можно использовать 128 спрайтов, не более 32 на строке. |
| | + | |
| | + | Расположение данных спрайтов в памяти можно менять при помощи REG_SPR_BASE. |
| | + | |
| | + | Начальный спрайт определяется в REG_SPR_FIRST. Количество спрайтов назначается в REG_SPR_COUNT. |
| | + | |
| | + | Все спрайты располагаются выше BG, есть флаг для отображения выше FG. |
| | + | |
| | + | Приоритет рисования спрайтов отдаётся более ранним в списке. |
| | + | |
| | + | Спрайты поддерживают обрезку окном, которое определяется регистрами REG_SPR_WIN. Каждый спрайт имеет флаг для рисования только внутри или снаружи окна. Спрайтовое окно может быть отключено. |
| | + | |
| | + | Спрайты поддерживают горизонтальное и вертикальное отражение. |
| | + | |
| | + | Спрайты отрисовываются построчно, но спрайтовая область ОЗУ копируется на 142 строке дисплея, препятствуя мультиплексированию спрайтов с растровыми эффектами. |
| | + | |
| | + | Спрайты используют последние 8 палитр. |
| | + | |
| | + | Формат |
| | + | |
| | + | Запись каждого спрайта в спрайтовой таблице использует 32-битный параметр типа DWORD. |
| | + | |
| | + | * 24-31 - положение по оси х |
| | + | * 16-23 - положение по оси y |
| | + | * 15 - отражение по вертикали |
| | + | * 14 - отражение по горизонтали |
| | + | * 13 - положение относительно FG |
| | + | * 12 - режим спрайтового окна (0=снаружи, 1=внутри) |
| | + | * 9-11 - палитра |
| | + | * 0-8 - плитка |
| | + | </spoiler> |
| | ===Звук=== | | ===Звук=== |
| | ===Кнопки=== | | ===Кнопки=== |
Ассемблеры
Инструменты
- bmp2swan - конвертер 16-цветного BMP-файла в тайлы, палитру и карту. Поддерживается отражение по вертикали и горизонтали.
- SwanLayer Merger - инструмент для объединения данных, нужен в случае, когда на изображение требуется больше 16 цветов: нужно разделить изображения на несколько 16-цветных BMP, сконвертировать при помощи bmp2swan, затем в SwanLayer Merger объединить данные и создать общие карту, набор плиток и палитры.
Эмуляторы
Хоумбрю
Описание
Шаблон:textcolor
Процессор
Процессорное ядро - NEC V30 MZ на частоте 3.072 Мгц.
NEC V30 MZ - убыстрённая версия V30 с внутренним конвеером (16 байтовый буфер предварительной загрузки). V30MZ примерно в 4 раза быстрее V30. V30 в свою очередь является клоном Intel 8086, но работает на 30% быстрее его, может эмулировать Intel 8080 и содержит собственные инструкции.
В V30 MZ выборка команд, их декодирование и выполнение инструкций выполняется параллельно. По этой причине сложно определить, какая часть программы в настоящее время выполняется путём контроля ввода адресной шины для выборки кода команды.
Если дана команда условного перехода, даже если не выполняются ответвления, адрес назначения перехода выбирается предварительно (1 раз), и поэтому дальнейший мониторинг программы затруднён.
V30 MZ имеет 8 очередей предварительной выборки (16 байт)
Между V30MZ и V30 есть несколько отличий, например, неподдерживаемые опкоды, другая обработка флагов после mul/div.
V30 MZ имеет 20-разрядную адресную шину, 16-разрядную шину данных (вход/выход разделены).
Память
Клик
Память разделена на сегементы по 64 Кбайт:
- 0 - RAM - 16 Кбайт для WonderSwan / 64 Кбайт для WonderSwan Color
- 1 - SRAM - 256 Кбайт (32х8) - BSI device BS62LV256TC
- 2 - ROM bank (начальный банк = последний)
- 3 - ROM bank (начальный банк = последний)
- 4 - ROM bank (начальный банк = последний - 11)
- 5 - ROM bank (начальный банк = последний - 10)
- 6 - ROM bank (начальный банк = последний - 9)
- 7 - ROM bank (начальный банк = последний - 8)
- 8 - ROM bank (начальный банк = последний - 7)
- 9 - ROM bank (начальный банк = последний - 6)
- A - ROM bank (начальный банк = последний - 5)
- B - ROM bank (начальный банк = последний - 4)
- C - ROM bank (начальный банк = последний - 3)
- D - ROM bank (начальный банк = последний - 2)
- E - ROM bank (начальный банк = последний - 1)
- F - ROM bank (начальный банк = последний)
Сегменты 2-$F переключаются с помощью портов :
$C2 - Cегмент 2. Значение, записанное в порт - номер ROM-банка. $FF означает последний ROM-банк, $FE = последний - 1 .. так далее.
$C3 - Cегмент 3. Аналогично
$C0 - Cегменты 4-$F. Биты 0...3 порта $C0 - это биты 4...7 номера ROM-банка в сегментах 4-$F. Биты 0...3 берутся из номера сегмента, например, IO[$C0]=$4E -> сегмент 9 содержит ROM bank $E9.
Карта памяти
| Адрес |
Содержит |
Шина |
Время доступа
|
| 000000h-00FFFFh |
Встроенное ОЗУ |
16-bit |
1 цикл
|
Пояснение:
Для WS и WSC:
- 000000h - 001FFFh - Встроенное ОЗУ (область 16 Кбайт)
- 002000h - 003FFFh - 4-цветные тайлы
Только для WSC:
- 004000h - 007FFFh - банк 0 16-цветных тайлов
- 008000h - 00BFFFh - банк 1 16-цветных тайлов
- 00C000h - 00FDFFh - Встроенное ОЗУ (дополнительная область для WSC)
- 00FE00h - 00FFFFh - палитры
|
| 010000h-01FFFFh |
SRAM картриджа |
8-bit |
3 цикла в WS-режиме, 1 цикл в WSC-режиме
|
| 020000h-02FFFFh |
Банк памяти картриджа 0 |
16-bit |
1 цикл
|
| 030000h-03FFFFh |
Банк памяти картриджа 1 |
16-bit |
1 цикл
|
| 040000h-0FFFFFh |
Банк памяти картриджа 2 |
16-bit |
1 цикл
|
Всё пространство от 010000h находится на картридже, который управляет банками памяти, доступом к SRAM и т.д.
Запись возможно только во встроенную ОЗУ и ОЗУ в картридже. Запись в ПЗУ картриджа невозможна. При этом это обеспечивается не маппером картриджа, а SoC консоли.
Можно попытаться получить доступ за пределами 20-битного адресного пространства (переполнение адресов), злоупотребив сегментацией. Поскольку в процессоре отсутствует линия A20, будет осуществлён к началу карты адресов.
Процессор использует формат памяти little-endian. Таким образом, при доступе к 16- или 32-битным данным в памяти наименее значимым байтом является первый байт, а наиболее значимым - последний. Точно так же, как в x86-процессорах, Z80 и других.
Внутренняя SRAM синхронизируется c input clock на частоте 12.288 Мгц, затем разделяется на 4 слота доступа, для обеспечения одновременного доступа периферийным устройствам без остановки. Порядок слотов неизвестен, в связи с чем может быть затруднено их использование для сложных программных трюков.
Слоты доступа:
- ЦП, DMA, Sprite DMA
- звуковое оборудование
- тайлы
- палитры
ЦП и DMA совместно используют один слот. Механизм работы DMA приостанавливает работу ЦП и работает на скорости /4. Sprite DMA, вероятно, тоже приостанавливает работу ЦП и находится в том же слоте.
Звуковое оборудование использует отдельный слот. Вероятно, считывает 16-битные слова в циклическом порядке (канал 1,2,3,4) в отдельные буферы каждый цикл и переносит данные (выборка 4-битная, требуется 4 цикла для заполнения 16-битного слова). Это объясняет задержку при запуске звукового оборудования - оно должно загрузить все буферы перед запуском для предотвращения вывода мусора.
Тайлы и карта тайлов находятся в отдельном слоте. Неизвестно, в какой момент копируются данные. Требуются тесты.
Палитровое ОЗУ должно иметь собственный слот, так как pixel clock /4. Каждый цикл 16-битное слово считывается из палитрового ОЗУ и выводится на экран.
Порты ввода/вывода
Клик
Дисплей
Клик
Разрешение дисплея WonderSwan равно 224х144
Дисплей WonderSwan может отображать 12 оттенков серого цвета, дисплеи WonderSwan Color и SwanCrystal способны отображать 12-битный RGB (4096 цветов).
Дисплейные тайминги:
0 224 256
-----------------
0| | |
| | |
| | |
| | |
144|-------------- |
159|_________________|
PIXCLK = 3.072MHz
HDISP = 224
HBLANK = 32
HTOTAL = 256
HCLK = 12kHz (3072000 / 256)
VDISP = 144
VBLANK = 15
VTOTAL = 159
VCLK = ~75.47Hz (12000 / 159)
Когда контроллер дисплея обращается к памяти, процессор не приостанавливается.
Палитры
Видеорежим задаётся в регистре REG_DISP_MODE. В зависимости от выбранного режима используются разные данные.
В монохромном режиме палитры управляются регистрами REG_PALMONO_POOL и REG_PALMONO.
REG_PALMONO_POOL создаёт пул из 8 оттенков, из которых собираются окончательные палитры. Цвета 4-битные: 00 - самый яркий, 0Fh - самый тёмный.
Регистры REG_PALMONO выбирает из пула по 4 цвета в каждую из 16 палитр.
Палитры 0-3 и 8-11 не имеют прозрачности. Палитры 4-7 и 12-15 используют цвет 0 в качестве прозрачного.
В цветном режиме регистры монохромных палитр игнорируются, палитры хранятся в оперативной памяти по адресу 00FE00h - 00FFFFh (1 слово на цвет, 16 цветов на палитру).
Палитры в режимах цветного видео полностью игнорируют монохромные регистры палитр, вместо этого сохраняя палитры в оперативной памяти.
В этих режимах палитры хранятся в оперативной памяти при 0FE00h, 1 слово на цвет, 16 цветов на палитру. В 4-цветном (2BPP) режиме 12 последних цветов каждой палитры равны цвету фона.
У всех палитр цвет 0 прозрачен, если не используется в качестве фона в регистре REG_BACK_COLOR
Формат ввода цвета:
- 8-11 - Red
- 4-7 - Green
- 0-3 - Blue
Тайлы
Все плитки имеют размер 8х8. Формат тайлов и их размещение в памяти зависит от режима, выбранного в REG_DISP_MODE.
4-цветные (2BPP) тайлы располагаются в ОЗУ по адресу 002000h - 003FFFh. В WonderSwan (и WonderSwan Color в режиме WS) здесь может хранится только 512 (0200h) тайлов. В цветном режиме здесь может храниться до 1024 (0400h) тайлов. Спрайты используют только первые 512 тайлов, верхние 512 тайлов могут использоваться только для фона, используя бит атрибута в записи каждой плитки. Каждый тайл занимает 16 байт.
Имеется два формата хранения данных в 4-цветном тайле:
- Planar Format - каждый байт определяет полную строку из 8 пикселей.
- Packed Format - каждый байт содержит все биты для 4 пикселей строки. Чётные байты определяют левые пиксели, нечётные - правые
16-цветные (4BPP) тайлы располагаются в ОЗУ, начиная с 004000h, и здесь может храниться до 1024 (0400h) тайлов. Спрайты используют только первые 512 тайлов, верхние 512 тайлов могут использоваться только для фона, используя бит атрибута в записи каждой плитки. Каждый тайл занимает 32 байта.
Имеется два формата хранения данных в 16-цветном тайле:
- Planar Format - каждый байт определяет полную строку из 8 пикселей.
- Packed Format - каждый байт содержит все биты для 2 пикселей строки. Байты по порядку определяют крайние левые пиксели, центральные левые, центральные правые, крайние правые.
Фоновые слои
WonderSwan имеет два фоновых слоя: BG (background, также SCR1) и FG (foreground, также SCR2). BG всегда ниже FG.
FG имеет функцию окна, которая настраивается с помощью регистра REG_SCR2_WIN
Расположение тайловых карт в памяти настраивается при помощи регистра REG_MAP_BASE
Каждый тайл в карте определяется 16-битным словом:
- 15 - отражение по вертикали
- 14 - отражение по горизонтали
- 13 - тайловый банк (только для WSC)
- 9-12 - палитра
- 0-8 - плитка
Фоны могут использовать все 16 палитр
Спрайты
Одновременно можно использовать 128 спрайтов, не более 32 на строке.
Расположение данных спрайтов в памяти можно менять при помощи REG_SPR_BASE.
Начальный спрайт определяется в REG_SPR_FIRST. Количество спрайтов назначается в REG_SPR_COUNT.
Все спрайты располагаются выше BG, есть флаг для отображения выше FG.
Приоритет рисования спрайтов отдаётся более ранним в списке.
Спрайты поддерживают обрезку окном, которое определяется регистрами REG_SPR_WIN. Каждый спрайт имеет флаг для рисования только внутри или снаружи окна. Спрайтовое окно может быть отключено.
Спрайты поддерживают горизонтальное и вертикальное отражение.
Спрайты отрисовываются построчно, но спрайтовая область ОЗУ копируется на 142 строке дисплея, препятствуя мультиплексированию спрайтов с растровыми эффектами.
Спрайты используют последние 8 палитр.
Формат
Запись каждого спрайта в спрайтовой таблице использует 32-битный параметр типа DWORD.
- 24-31 - положение по оси х
- 16-23 - положение по оси y
- 15 - отражение по вертикали
- 14 - отражение по горизонтали
- 13 - положение относительно FG
- 12 - режим спрайтового окна (0=снаружи, 1=внутри)
- 9-11 - палитра
- 0-8 - плитка
Звук
Кнопки
Системный контроллер
Прерывания
Последовательный порт
Внутренняя EEPROM
DMA контроллер
Sound DMA контроллер
Таймеры
Картридж
WonderWitch