Материал из Chipwiki
Перейти к: навигация, поиск
WonderSwan/Программирование — различия между версиями
(Звук)
Строка 1283: Строка 1283:
 
</spoiler>
 
</spoiler>
 
===Звук===
 
===Звук===
 +
<spoiler>Имеется 4 аудиоканала. Каждый канал может воспроизводить короткие семплы (4 бит, 16 байт (32 семпла = по 2 семпла на байты (биты 0-3 и 4-7)) с выбираемой частотой дискретизации = 3,072*10e6 / ((2048-N)x32 ) Гц , где N = 11-битное значение.
 +
 +
Громкость каждого канала регулируется отдельно, каждый канал с настраиваемой стереопанорамой
 +
 +
Канал 2 может воспроизводить 8-битные семплы (функция voice)
 +
 +
Канал 3 имеет функцию sweep
 +
 +
Канал 4 можно использовать как шумовой генератор
 +
 +
В WonderSwan Color имеется дополнительный PCM-канал (HyperVoice), но только для наушников.
 +
 +
'''Тайминги'''
 +
 +
Каждый звуковой канал обновляется полный цикл (3072000 Гц). sweep-секция обновляется каждый 256х32 такта (375 гц) ЦАП наушников обновляется каждый 128 тактов (24000 гц).
 +
 +
'''Высота''' (pitch)
 +
 +
Алгоритм регистра высоты: reg = 2048 - (3072000 / 32 / f)
 +
 +
Конвертация значения регистра обратно в частоту: f = 3072000 / 32 / (2048 - reg) Hz
 +
 +
Значение используется в регистрах REG_SND_CHx_PITCH.
 +
 +
Регистр хранит значение для сравнения обратного счётчика, который используется для перехода к следующему шагу в семпле. После воспроизведения каждого семпла внутренний счётчик сбрасывается до 2048, затем каждый такт уменьшается на 1. Как только внутренний счётчик будет равен регистру, будет выведен следующий семпл.
 +
 +
'''HyperVoice'''
 +
 +
См. регистры REG_HYPER_CTRL и REG_HYPER_CHAN_CTRL
 +
 +
'''Sweep'''
 +
 +
Каждый шаг в sweep происходит каждые (reg+1)*32*256 тактов.
 +
 +
С точки зрения реального времени: reg = (T/2.667ms)-1, где T - время в милисекундах.
 +
 +
Значение используется в регистре REG_SND_SWEEP_TIME.
 +
 +
'''Voice'''
 +
 +
Voice функционирует на канале 2, использует регистр REG_SND_CH2_VOL для передачи 8-bit PCM-данных.
 +
 +
'''Шум'''
 +
 +
Канал 4 может работать как шумовой канал.
 +
 +
Используется 15-битный {{wiki|ru|LFSR|LFSR}} со следующим алгоритмом:
 +
 +
noise_bit = (1 ^ (ctr >> 7) ^ (ctr >> tap)) & 1<br/>
 +
ctr = (ctr << 1) | noise_bit
 +
 +
Настраиваемые значения tap:
 +
* режим 0: tap = 14
 +
* режим 1: tap = 10
 +
* режим 2: tap = 13
 +
* режим 3: tap = 4
 +
* режим 4: tap = 8
 +
* режим 5: tap = 6
 +
* режим 6: tap = 9
 +
* режим 7: tap = 11
 +
 +
Сброс шума устанавливает счетчик LFSR на 00000h. LFSR обновляется, когда включающий бит активен, а канал 4 включен, даже если канал 4 не находится в режиме шума.
 +
 +
Выходной сигнал шумового канала равен noise_bit, умноженный на 0Fh.</spoiler>
 +
 
===Кнопки===
 
===Кнопки===
 
===Системный контроллер===
 
===Системный контроллер===

Версия 16:04, 22 апреля 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