Материал из Chipwiki
Перейти к: навигация, поиск
WonderSwan/Программирование — различия между версиями
(Перенёс самый большой раздел вних)
Строка 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>
 
===Звук===
 
===Звук===
 
===Кнопки===
 
===Кнопки===

Версия 16:14, 17 апреля 2019

Ассемблеры

  • nasm (16-битный)

Инструменты

  • bmp2swan - конвертер 16-цветного BMP-файла в тайлы, палитру и карту. Поддерживается отражение по вертикали и горизонтали.
  • SwanLayer Merger - инструмент для объединения данных, нужен в случае, когда на изображение требуется больше 16 цветов: нужно разделить изображения на несколько 16-цветных BMP, сконвертировать при помощи bmp2swan, затем в SwanLayer Merger объединить данные и создать общие карту, набор плиток и палитры.

Эмуляторы

Хоумбрю

Описание

gray

Процессор

Процессорное ядро - 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-разрядную шину данных (вход/выход разделены).

Память

Клик

Порты ввода/вывода

Клик

Дисплей

Клик

Звук

Кнопки

Системный контроллер

Прерывания

Последовательный порт

Внутренняя EEPROM

DMA контроллер

Sound DMA контроллер

Таймеры

Картридж

WonderWitch