Материал из Chipwiki
Перейти к: навигация, поиск
WonderSwan/Программирование — различия между версиями
(Прерывания)
(Прерывания)
Строка 1363: Строка 1363:
 
Эти номера прерываний привязаны к началу IVT.
 
Эти номера прерываний привязаны к началу IVT.
  
{|
+
{|class="wikitable"
 
|-
 
|-
 
! Прерывание !! Название !! Описание
 
! Прерывание !! Название !! Описание
Строка 1394: Строка 1394:
 
Level(?)-инициируемые прерывания должны быть урегулированы, иначе прерывание будет срабатывать непрерывно.
 
Level(?)-инициируемые прерывания должны быть урегулированы, иначе прерывание будет срабатывать непрерывно.
  
 
+
{|class="wikitable"
{|
 
 
|-
 
|-
 
! Прерывание !! Триггер !! Название !! Описание
 
! Прерывание !! Триггер !! Название !! Описание
 
|-
 
|-
 
| 00h || Level || HWINT_SER_TX || Serial TX ready interrupt
 
| 00h || Level || HWINT_SER_TX || Serial TX ready interrupt
 +
|-
 
| 01h || Edge || HWINT_KEY || Key press interrupt
 
| 01h || Edge || HWINT_KEY || Key press interrupt
 +
|-
 
| 02h || Level || HWINT_CART || Cartridge interrupt (usually RTC alarm)
 
| 02h || Level || HWINT_CART || Cartridge interrupt (usually RTC alarm)
 +
|-
 
| 03h || Level || HWINT_SER_RX || Serial RX ready interrupt
 
| 03h || Level || HWINT_SER_RX || Serial RX ready interrupt
 +
|-
 
| 04h || Edge || HWINT_LINE || Line compare interrupt
 
| 04h || Edge || HWINT_LINE || Line compare interrupt
 +
|-
 
| 05h || Edge || HWINT_VBLANK_TMR || V-Blank timer interrupt
 
| 05h || Edge || HWINT_VBLANK_TMR || V-Blank timer interrupt
 +
|-
 
| 06h || Edge || HWINT_VBLANK || V-Blank interrupt
 
| 06h || Edge || HWINT_VBLANK || V-Blank interrupt
 +
|-
 
| 07h || Edge || HWINT_HBLANK_TMR || H-Blank timer interrupt
 
| 07h || Edge || HWINT_HBLANK_TMR || H-Blank timer interrupt
 
|}
 
|}
  
 
'''Порты'''
 
'''Порты'''
 
+
REG_INT_BASE<br/>
REG_INT_BASE
+
REG_INT_ENABLE<br/>
REG_INT_ENABLE
+
REG_INT_STATUS<br/>
REG_INT_STATUS
+
REG_INT_ACK<br/>
REG_INT_ACK
 
  
 
===Последовательный порт===
 
===Последовательный порт===

Версия 22:07, 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

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

Внутренняя EEPROM

DMA контроллер

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

Таймеры

Картридж

WonderWitch