Материал из Chipwiki
Перейти к: навигация, поиск
WonderSwan/Программирование

Шаблон:Раздел не завершен

Ассемблеры

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

Инструменты

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

Эмуляторы

Хоумбрю

Описание

Перевод и компоновка информации в процессе

Процессор

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

Память

Клик

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

Клик

Дисплей

Клик

Звук

Клик

Кнопки

Проверка статус кнопок в порте 0B5h.

Кнопки мультиплексированы на 4 бита с использованием AND. Чтобы получить полные значения кнопок, повторите каждое из значений маски и объедините их.

Прерывания

Таблица векторов прерываний расположена в 0000:0000h, каждая запись имеет длину 4 байта и содержит дальний указатель на обработчик. В таблице векторов есть 100h записей, но только указатели прерываний процессора и аппаратных прерываний могут заполняться или использоваться для указателей обработчиков прерываний.

Прерывания процессора

Эти номера прерываний привязаны к началу IVT.

Прерывание Название Описание
00h CPUINT_DIV Разделить ошибку
01h CPUINT_STEP Одноступенчатое прерывание
02h CPUINT_NMI Немаскируемое прерывание
03h CPUINT_BREAK инструкция INT 3
04h CPUINT_INTO Переполнение прерывания
05h CPUINT_BOUNDS BOUND-отказ
06h CPUINT_INVALID Неверный опкод
07h CPUINT_ESCAPE Опкод выхода

Аппаратные прерывания

Эти прерывания не привязаны к началу IVT, регистр REG_INT_BASE определяет базу для векторов аппаратных прерываний.

Они имеют приоритеты, самый высокий номер прерывания имеет приоритет над более низким.

Edge(?)-инициируемые прерывания должны быть подтверждены через REG_INT_ACK для разрешения запуска другого прерывания.

Level(?)-инициируемые прерывания должны быть урегулированы, иначе прерывание будет срабатывать непрерывно.

Прерывание Триггер Название Описание
00h Level HWINT_SER_TX Serial TX ready interrupt
01h Edge HWINT_KEY Key press interrupt
02h Level HWINT_CART Cartridge interrupt (usually RTC alarm)
03h Level HWINT_SER_RX Serial RX ready interrupt
04h Edge HWINT_LINE Line compare interrupt
05h Edge HWINT_VBLANK_TMR V-Blank timer interrupt
06h Edge HWINT_VBLANK V-Blank interrupt
07h Edge HWINT_HBLANK_TMR H-Blank timer interrupt

Порты
REG_INT_BASE
REG_INT_ENABLE
REG_INT_STATUS
REG_INT_ACK

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

Порт расширения - это прежде всего внешний последовательный порт. Разъем имеет только последовательный контакт IN и OUT, что означает, что нет аппаратного управления потоком данных.

Последовательный контроллер WonderSwan имеет однобайтовый входной буфер и не имеет выходного буфера. Любое переполнение входного буфера приведет к установке бита переполнения в REG_SER_STATUS, и последовательный контроллер перестаёт отвечать, пока не будет установлен бит сброса переполнения.

Синхронные передачи

Чтобы открыть последовательное соединение, установите бит разрешения и бит сброса превышения в REG_SER_STATUS.

Чтобы закрыть последовательную связь, очистите бит разрешения. Скорее всего, придётся подождать, пока поднимается пустая отправка.

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

Чтобы получить символ, дождитесь, пока полученные данные поднимутся выше, а затем считайте байт данных из REG_SER_DATA. Если при ожидании было установлено Переполнение (Overrun) и оно произошло, выполните Overrun Reset.

Асинхронные передачи ???

Порты
REG_SER_DATA
REG_SER_STATUS

Внутренняя EEPROM

WonderSwan имеет внутреннюю EEPROM размером 1 Кбит (64x16 бит), используемую для хранения информации о пользователе и некоторых очень небольших объемов данных, сохраняемых игрой. WonderSwan Color имеет EEPROM размером 16 Кбит (1024x16 бит), где добавлены ещё еще несколько полей информации о пользователе и увеличена область для игровых сохранений.

Информация о владельце может быть установлена в программе IPL.

Порты REG_IEEP_DATA
REG_IEEP_ADDR
REG_IEEP_STATUS
REG_IEEP_CMD

Использование ???

Информация о владельце

Addr Size Description
060h 10h Имя (схема кодирования указана ниже)
070h 02h Год рождения
072h 01h Месяц рождения
073h 01h День рождения
074h 01h Пол
075h 01h Группа крови
Для WSC/SC
080h 03h Неизвестно
083h 01h Флаги:

b7 - неизвестно
b6 - контрастность LCD (0 - низкая, 1 - высокая)
b0-1 - громкость по-умолчанию

084h 01h Цвет имени:

00 - чёрный
01 - красный
02 - оранжевый
03 - жёлтый
04 - зелёный
и т.д.

Кодирование имени:

Значение ASCII Описание
000h 020h Пробел
001h-00Ah 030h-039h Числа
00Bh-024h 041h-05Ah Заглавные символы
025h 003h Серде
026h 00Dh Музыкальная нота
027h 02Bh Плюс
028h 02Dh Минус
029h 03Fh Знак вопроса
02Ah 02Eh Точка

DMA контроллер

Этот контроллер прямого доступа к памяти приостанавливает работу процессора во время передачи.

На WonderSwan все эти регистры не отображены. Информация о них верна для режима совместимости с WonderSwan на WonderSwan Color или SwanCrystal.

Контроллер DMA:

  • передаёт данные в словах, все регистры обеспечивают выравнивание слов
  • не может получить доступ к SRAM из-за 8-битной шины
  • может передавать только в IRAM, нет способа указать пункт назначения за его пределами

Контроллер DMA имеет несколько режимов сбоя передачи. При быстром сбое передачи контроллер не запускается, процессор не останавливается. При медленном сбое передача занимает столько же времени, сколько и завершённая передача, только некоторые или все слова не будут переданы.

Случаи быстрого сбоя:

  • длина равна 0
  • источник указан как находящийся в SRAM

Случаи медленного сбоя:

  • источник перемещается в SRAM - в этом случае слова передаются до момента сбоя

Передача данных контроллером занимает мало времени. Общее время передачи составляет 5 + 2n циклов, где n-количество передаваемых слов.

Порты
REG_DMA_SRC
REG_DMA_SRC_HI
REG_DMA_DST
REG_DMA_LEN
REG_DMA_CTRL

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

Таймеры

Картридж

WonderWitch