Материал из Chipwiki
Перейти к: навигация, поиск
WonderSwan/Программирование — различия между версиями
(Последовательный порт)
Строка 1420: Строка 1420:
  
 
===Последовательный порт===
 
===Последовательный порт===
 +
Порт расширения - это прежде всего внешний последовательный порт. Разъем имеет только последовательный контакт IN и OUT, что означает, что нет аппаратного управления потоком данных.
 +
 +
Последовательный контроллер WonderSwan имеет однобайтовый входной буфер и не имеет выходного буфера. Любое переполнение входного буфера приведет к установке бита переполнения в REG_SER_STATUS, и последовательный контроллер перестаёт отвечать, пока не будет установлен бит сброса переполнения.
 +
 
===Внутренняя EEPROM===
 
===Внутренняя EEPROM===
 
===DMA контроллер===
 
===DMA контроллер===

Версия 22:10, 29 октября 2019

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

Ассемблеры

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

Инструменты

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

Эмуляторы

Хоумбрю

Описание

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

Память

Клик

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

Клик

Дисплей

Клик

Звук

Клик

Кнопки

Проверка статус кнопок в порте 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, и последовательный контроллер перестаёт отвечать, пока не будет установлен бит сброса переполнения.

Внутренняя EEPROM

DMA контроллер

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

Таймеры

Картридж

WonderWitch