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

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