Материал из Chipwiki
Перейти к: навигация, поиск
WonderSwan/Программирование — различия между версиями
(Описание)
Строка 5: Строка 5:
 
* http://daifukkat.su/docs/wsman/
 
* http://daifukkat.su/docs/wsman/
  
{{textcolor|Скоро здесь будут красивые таблицы|gray|Стиль=font-style:italic;}}
+
{{textcolor|Перевод и компоновка информации в процессе|gray|Стиль=font-style:italic;}}
 +
 
 +
===Процессор===
 +
Процессорное ядро - 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.
 +
 
 +
===Память===
 +
<spoiler>
 +
Память разделена на сегементы по 64 Кбайт:
 +
* 0 - RAM - 16 Кбайт для WonderSwan / 64 Кбайт для WonderSwan Color
 +
* 1 - SRAM - 256 Кбайт (32х8) - BSI device BS62LV256TC
 +
* 2 - ROM bank (начальный банк = последний)
 +
* 3 - ROM bank (начальный банк = последний)
 +
* 4 - ROM bank (начальный банк = последний - 11)
 +
* 5 - ROM bank (начальный банк = последний - 10)
 +
* 6 - ROM bank (начальный банк = последний - 9)
 +
* 7 - ROM bank (начальный банк = последний - 8)
 +
* 8 - ROM bank (начальный банк = последний - 7)
 +
* 9 - ROM bank (начальный банк = последний - 6)
 +
* A - ROM bank (начальный банк = последний - 5)
 +
* B - ROM bank (начальный банк = последний - 4)
 +
* C - ROM bank (начальный банк = последний - 3)
 +
* D - ROM bank (начальный банк = последний - 2)
 +
* E - ROM bank (начальный банк = последний - 1)
 +
* F - ROM bank (начальный банк = последний)
 +
 
 +
Сегменты 2-$F переключаются с помощью портов :
 +
 
 +
$C2 - Cегмент 2. Значение, записанное в порт - номер ROM-банка. $FF означает последний ROM-банк, $FE = последний - 1 .. так далее.<br/>
 +
$C3 - Cегмент 3. Аналогично<br/>
 +
$C0 - Cегменты 4-$F. Биты 0...3 порта $C0 - это биты 4...7 номера ROM-банка в сегментах 4-$F. Биты 0...3 берутся из номера сегмента, например, IO[$C0]=$4E  -> сегмент 9 содержит ROM bank $E9.
 +
 
 +
'''Карта памяти'''
 +
{|class="wikitable"
 +
|-
 +
! Адрес !! Содержит !! Шина !! Время доступа
 +
|-
 +
| 000000h-00FFFFh || Встроенное ОЗУ || 16-bit || 1 цикл
 +
|-
 +
| colspan="4" |Пояснение:<br/>
 +
Для WS и WSC:
 +
* 000000h - 001FFFh - Встроенное ОЗУ (область 16 Кбайт)
 +
* 002000h - 003FFFh - 4-цветные тайлы
 +
Только для WSC:
 +
* 004000h - 007FFFh - банк 0 16-цветных тайлов
 +
* 008000h - 00BFFFh - банк 1 16-цветных тайлов
 +
* 00C000h - 00FDFFh - Встроенное ОЗУ (дополнительная область для WSC)
 +
* 00FE00h - 00FFFFh - палитры
 +
 
 +
|-
 +
| 010000h-01FFFFh || SRAM картриджа || 8-bit || 3 цикла в WS-режиме, 1 цикл в WSC-режиме
 +
|-
 +
| 020000h-02FFFFh || Банк памяти картриджа 0 || 16-bit || 1 цикл
 +
|-
 +
| 030000h-03FFFFh || Банк памяти картриджа 1 || 16-bit || 1 цикл
 +
|-
 +
| 040000h-0FFFFFh || Банк памяти картриджа 2 || 16-bit || 1 цикл
 +
|}
 +
 
 +
Всё пространство от 010000h находится на картридже, который управляет банками памяти, доступом к SRAM и т.д.
 +
 
 +
Запись возможно только во встроенную ОЗУ и ОЗУ в картридже. Запись в ПЗУ картриджа невозможна. При этом это обеспечивается не маппером картриджа, а SoC консоли.
 +
 
 +
Можно попытаться получить доступ за пределами 20-битного адресного пространства (переполнение адресов), злоупотребив сегментацией. Поскольку в процессоре отсутствует линия A20, будет осуществлён к началу карты адресов.
 +
 
 +
Процессор использует формат памяти little-endian. Таким образом, при доступе к 16- или 32-битным данным в памяти наименее значимым байтом является первый байт, а наиболее значимым - последний. Точно так же, как в x86-процессорах, Z80 и других.
 +
 
 +
Внутренняя SRAM синхронизируется c input clock на частоте 12.288 Мгц, затем разделяется на 4 слота доступа,  для обеспечения одновременного доступа периферийным устройствам без остановки. Порядок слотов неизвестен, в связи с чем может быть затруднено их использование для сложных программных трюков.
 +
 
 +
Слоты доступа:
 +
* ЦП, DMA, Sprite DMA
 +
* звуковое оборудование
 +
* тайлы
 +
* палитры
 +
 
 +
ЦП и DMA совместно используют один слот. Механизм работы DMA приостанавливает работу ЦП и работает на скорости /4. Sprite DMA, вероятно, тоже приостанавливает работу ЦП и находится в том же слоте.
 +
 
 +
Звуковое оборудование использует отдельный слот. Вероятно, считывает 16-битные слова в циклическом порядке (канал 1,2,3,4) в отдельные буферы каждый цикл и переносит данные (выборка 4-битная, требуется 4 цикла для заполнения 16-битного слова). Это объясняет задержку при запуске звукового оборудования - оно должно загрузить все буферы перед запуском для предотвращения вывода мусора.
 +
 
 +
Тайлы и карта тайлов находятся в отдельном слоте. Неизвестно, в какой момент копируются данные. Требуются тесты.
 +
 
 +
Палитровое ОЗУ должно иметь собственный слот, так как pixel clock /4. Каждый цикл 16-битное слово считывается из палитрового ОЗУ и выводится на экран.
 +
</spoiler>
 +
===Порты ввода/вывода===
 +
<spoiler>
 +
{|class="wikitable"
 +
|-
 +
! Порт !! Доступ !!width="150px"| {{Подсказка|Маска|76543210}}
 +
! Название
 +
! Описание
 +
|-
 +
| 000h || RW || <nowiki>00******</nowiki>
 +
| REG_DISP_CTRL
 +
| Управление дисплеем<br/>
 +
Биты:
 +
* 0 - BG включен
 +
* 1 - FG включен
 +
* 2 - спрайты включены
 +
* 3 - спрайтовое окно включено
 +
* 4,5 - FG-окно
 +
** 0 0 - слой FG отображается внутри и снаружи зоны окна
 +
** 0 1 - ??
 +
** 1 0 - слой FG отображается только внутри окна
 +
** 1 1 - слой FG отображается за пределами окна.
 +
 
 +
|-
 +
| 001h || RW || <nowiki>00000*** (WS)</nowiki><br/><nowiki>******** (WSC)</nowiki>
 +
| REG_BACK_COLOR
 +
| Определяет цвет фона<br/>
 +
Биты:
 +
* WS: 0-2 - цвет фона из пула
 +
* WSC: 0-3 - цвет фона, 4-7 палитра фона
 +
 
 +
|-
 +
| 002h  || R  || <nowiki>********</nowiki>
 +
| REG_LINE_CUR
 +
| Отображение текущей строки
 +
|-
 +
| 003h || RW || <nowiki>********</nowiki>
 +
| REG_LINE_CMP
 +
| Сравнение линий (для прерывания обнаружения рисованной линии)
 +
|-
 +
| 004h || RW || <nowiki>000***** (WS)</nowiki><br/><nowiki>00****** (WSC)</nowiki>
 +
| REG_SPR_BASE
 +
| Определяет базовый адрес для таблицы спрайтов. Чтобы получить адрес таблицы, сдвиньте значение влево 9 раз: х хххххх0 00000000
 +
|-
 +
| 005h  || RW || <nowiki>0*******</nowiki>
 +
| REG_SPR_FIRST
 +
| Определяет номер спрайта для начала рисования
 +
|-
 +
| 006h  || RW || <nowiki>********</nowiki>
 +
| REG_SPR_COUNT
 +
| Количество спрайтов для рисования. Любое значение выше 080h действует как 080h.
 +
|-
 +
| 007h  || RW || <nowiki>0***0*** (WS)</nowiki><br/><nowiki>******** (WSC)</nowiki>
 +
| REG_MAP_BASE
 +
| Базовый адрес тайловых карт<br/>
 +
Формат:
 +
* Биты 7-0 : ffffbbbb
 +
* Биты 7-4 - Определение FG (адрес - 0ffff000 00000000)
 +
* Биты 3-0 - Определение BG (адрес - 0bbbb000 00000000)   
 +
 
 +
|-
 +
| 008h  || RW || <nowiki>********</nowiki>
 +
| REG_SCR2_WIN_X0
 +
| Определение X верхнего левого угла окна FG
 +
|-
 +
| 009h  || RW || <nowiki>********</nowiki>
 +
| REG_SCR2_WIN_Y0
 +
| Определение Y верхнего левого угла окна FG
 +
|-
 +
| 00Ah  || RW || <nowiki>********</nowiki>
 +
| REG_SCR2_WIN_X1
 +
| Определение X нижнего правого угла окна FG
 +
|-
 +
| 00Bh  || RW || <nowiki>********</nowiki>
 +
| REG_SCR2_WIN_Y1
 +
| Определение Y нижнего правого угла окна FG
 +
|-
 +
| 00Ch  || RW || <nowiki>********</nowiki>
 +
| REG_SPR_WIN_X0
 +
| Определение X верхнего левого угла окна спрайтов
 +
|-
 +
| 00Dh  || RW || <nowiki>********</nowiki>
 +
| REG_SPR_WIN_Y0
 +
| Определение Y верхнего левого угла окна спрайтов
 +
|-
 +
| 00Eh  || RW || <nowiki>********</nowiki>
 +
| REG_SPR_WIN_X1
 +
| Определение X нижнего правого угла окна спрайтов
 +
|-
 +
| 00Fh  || RW || <nowiki>********</nowiki>
 +
| REG_SPR_WIN_Y1
 +
| Определение Y нижнего правого угла окна спрайтов
 +
|-
 +
| 010h  || RW || <nowiki>********</nowiki>
 +
| REG_SCR1_X
 +
| Скролл BG по оси X
 +
|-
 +
| 011h  || RW || <nowiki>********</nowiki>
 +
| REG_SCR1_Y
 +
| Скролл BG по оси Y
 +
|-
 +
| 012h  || RW || <nowiki>********</nowiki>
 +
| REG_SCR2_X
 +
| Скролл FG по оси X
 +
|-
 +
| 013h  || RW || <nowiki>********</nowiki>
 +
| REG_SCR2_Y
 +
| Скролл FG по оси Y
 +
|-
 +
| 014h  || RW
 +
| <nowiki>******** (WS)</nowiki><br/><nowiki>****00** (WSC)</nowiki><br/><nowiki>0000000* (SC)</nowiki>
 +
| REG_LCD_CTRL
 +
| Бит 0 включает и выключает дисплей. Фукнкция остальных бит зависит от системы:
 +
* WonderSwan:
 +
** 1-7 - ???
 +
* WonderSwan Color:
 +
** 4-7 - ???
 +
** 1 - контраст (0 - низкий, 1 - высокий)
 +
* SwanCrystal
 +
** 1-7 - 0
 +
 
 +
|-
 +
| 015h  || RW || <nowiki>00******</nowiki>
 +
| REG_LCD_ICON
 +
| Иконки.<br/>
 +
Биты:
 +
* 5 - большой круг
 +
* 4 - средний круг
 +
* 3 - маленький круг
 +
* 2 - положение иконки по горизонтали
 +
* 1 - положение иконки по вертикали
 +
* 0 - индикатор сна
 +
 
 +
|-
 +
| 016h  || RW  || <nowiki>********</nowiki>
 +
| REG_LCD_VTOTAL
 +
| Дисплейное прерывание VTOTAL. Влияет на все видеотайминги. Начальное значение 09Eh.
 +
 
 +
При установке значения на 255 дисплей отключается.
 +
 
 +
Установка значения меньше 143 прекращает вызов прерывания VBLANK и вызывает повторение первых строк VTOTAL на дисплее.
 +
 
 +
На SwanCrystal установка нечётных значений в регистре приводит к плохой работе дисплея: сканлайн, размытие, временное выгорание.
 +
|-
 +
| 017h  || RW  || <nowiki>********</nowiki>
 +
| REG_LCD_VSYNC
 +
| Вероятно, положение VSYNC
 +
 
 +
На SwanCrystal регистр нулевой. Начальное значение - 09Bh
 +
 
 +
Должен быть больше 144 или меньше, чем VTOTAL, иначе дисплей выключится (?).
 +
|-
 +
| 018h  ||colspan="4"| --
 +
|-
 +
| 019h  ||colspan="4"| --
 +
|-
 +
| 01Ah  ||colspan="4"| ????
 +
|-
 +
| 01Bh  ||colspan="4"| --
 +
|-
 +
| 01Ch  || RW  ||rowspan="4"|<nowiki>********</nowiki>
 +
| REG_PALMONO_POOL_0
 +
| rowspan="4"| Выбор пула монохромной палитры<br/>
 +
Биты:
 +
* 4-7 - Цвет (reg*2)+1
 +
* 0-3 - Цвет (reg*2)+0
 +
 
 +
|-
 +
| 01Dh  || RW  || REG_PALMONO_POOL_1
 +
|-
 +
| 01Eh  || RW  || REG_PALMONO_POOL_2
 +
|-
 +
| 01Fh  || RW  || REG_PALMONO_POOL_3
 +
|-
 +
| 020h  || RW  ||rowspan="32"| <nowiki>0***0*** 0***0***</nowiki> || REG_PALMONO_0 (Low)
 +
|rowspan="32"| Монохромная палитра.<br/>
 +
Биты:
 +
* 12-14 - цвет 3
 +
* 8-10 - цвет 2
 +
* 4-6 - цвет 1
 +
* 0-2 - цвет 0
 +
 
 +
|-
 +
| 021h  || RW  || REG_PALMONO_0 (High)
 +
|-
 +
| 022h  || RW  || REG_PALMONO_1 (Low)
 +
|-
 +
| 023h  || RW  || REG_PALMONO_1 (High)
 +
|-
 +
| 024h  || RW  || REG_PALMONO_2 (Low)
 +
|-
 +
| 025h  || RW  || REG_PALMONO_2 (High)
 +
|-
 +
| 026h  || RW  || REG_PALMONO_3 (Low)
 +
|-
 +
| 027h  || RW  || REG_PALMONO_3 (High)
 +
|-
 +
| 028h  || RW  || REG_PALMONO_4 (Low)
 +
|-
 +
| 029h  || RW  || REG_PALMONO_4 (High)
 +
|-
 +
| 02Ah  || RW  || REG_PALMONO_5 (Low)
 +
|-
 +
| 02Bh  || RW  || REG_PALMONO_5 (High)
 +
|-
 +
| 02Ch  || RW  || REG_PALMONO_6 (Low)
 +
|-
 +
| 02Dh  || RW  || REG_PALMONO_6 (High)
 +
|-
 +
| 02Eh  || RW  || REG_PALMONO_7 (Low)
 +
|-
 +
| 02Fh  || RW  || REG_PALMONO_7 (High)
 +
|-
 +
| 030h  || RW  || REG_PALMONO_8 (Low)
 +
|-
 +
| 031h  || RW  || REG_PALMONO_8 (High)
 +
|-
 +
| 032h  || RW  || REG_PALMONO_9 (Low)
 +
|-
 +
| 033h  || RW  || REG_PALMONO_9 (High)
 +
|-
 +
| 034h  || RW  || REG_PALMONO_A (Low)
 +
|-
 +
| 035h  || RW  || REG_PALMONO_A (High)
 +
|-
 +
| 036h  || RW  || REG_PALMONO_B (Low)
 +
|-
 +
| 037h  || RW  || REG_PALMONO_B (High)
 +
|-
 +
| 038h  || RW  || REG_PALMONO_C (Low)
 +
|-
 +
| 039h  || RW  || REG_PALMONO_C (High)
 +
|-
 +
| 03Ah  || RW  || REG_PALMONO_D (Low)
 +
|-
 +
| 03Bh  || RW  || REG_PALMONO_D (High)
 +
|-
 +
| 03Ch  || RW  || REG_PALMONO_E (Low)
 +
|-
 +
| 03Dh  || RW  || REG_PALMONO_E (High)
 +
|-
 +
| 03Eh  || RW  || REG_PALMONO_F (Low)
 +
|-
 +
| 03Fh  || RW  || REG_PALMONO_F (High)
 +
|-
 +
| 040h  || RW  ||rowspan="2"| <nowiki>******** *******0</nowiki> || REG_DMA_SRC (Low)
 +
|rowspan="2"| Адрес источника DMA, как линейный адрес (младшие 16 бит). Обновляется после каждой передачи
 +
|-
 +
| 041h  || RW  || REG_DMA_SRC (Mid)
 +
|-
 +
| 042h  || RW  || <nowiki>0000****</nowiki>
 +
| REG_DMA_SRC_HI
 +
| Адрес источника DMA, как линейный адрес (старшие 4 бита). Обновляется после каждой передачи
 +
|-
 +
| 043h  ||colspan="4"| --
 +
|-
 +
| 044h  || RW  ||rowspan="2"| <nowiki>******** *******0</nowiki> || REG_DMA_DST (Low)
 +
|rowspan="2"| Адрес назначения DMA IRAM, как линейный адрес. Обновляется после каждой передачи
 +
|-
 +
| 045h  || RW  || REG_DMA_DST (High)
 +
|-
 +
| 046h  || RW  ||rowspan="2"| <nowiki>******** *******0</nowiki> || REG_DMA_LEN (Low)
 +
|rowspan="2"| Размер передачи DMA в байтах. Обновляется после каждой передачи
 +
|-
 +
| 047h  || RW  || REG_DMA_LEN (High)
 +
|-
 +
| 048h  || RW  || <nowiki>**000000</nowiki>
 +
| REG_DMA_CTRL
 +
| Управление передачей DMA.<br/>
 +
Биты:
 +
* 7 - стоп/старт передачи. Когда передача закончена, бит принимает значение 0.
 +
* 6 - шаг адреса (0 = увеличение, 1 = уменьшение)
 +
 
 +
|-
 +
| 049h  ||colspan="4"| --
 +
|-
 +
| 04Ah  || RW  ||rowspan="2"| <nowiki>******** ********</nowiki> || REG_SDMA_SRC (Low)
 +
|rowspan="2"| Адрес источника Sound DMA как линейный адрес (младшие 16 битов). Обновляется после каждой передачи
 +
|-
 +
| 04Bh  || RW  || REG_SDMA_SRC (Mid)
 +
|-
 +
| 04Ch  || RW  || <nowiki>******** ********</nowiki>
 +
| REG_SDMA_SRC_HI
 +
| Адрес источника Sound DMA как линейный адрес (старшие 4 бит). Обновляется после каждой передачи
 +
|-
 +
| 04Dh  ||colspan="4"| --
 +
|-
 +
| 04Eh  || RW  ||rowspan="2"| <nowiki>******** ********</nowiki> || REG_SDMA_LEN (Low)
 +
|rowspan="2"| Размер передачи Sound DMA в байтах (младшие 16 бит). Обновляется после каждой передачи
 +
|-
 +
| 04Fh  || RW  || REG_SDMA_LEN (Mid)
 +
|-
 +
| 050h  || RW  || <nowiki>0000****</nowiki>
 +
| REG_SDMA_LEN_HI
 +
| Размер передачи Sound DMA в байтах (старшие 4 бит). Обновляется после каждой передачи
 +
|-
 +
| 051h  ||colspan="4"| --
 +
|-
 +
| 052h  || RW  || <nowiki>**0*****</nowiki>
 +
| REG_SDMA_CTRL
 +
| Управление передачей Sound DMA<br/>
 +
Биты:
 +
* 7 - стоп/старт передачи. Когда передача закончена, бит принимает значение 0. В случае зацикливания бит не сбрасывается сам по себе.
 +
* 6 - шаг адреса (0 = увеличение, 1 = уменьшение)
 +
* 4 - Порт назначения (0 = REG_SND_CH2_VOL, 1 = REG_SND_HYPERVOICE)
 +
* 3 - цикл
 +
* 2 - ???
 +
* 0-1 - темп
 +
** 0  CLK/768 (4000kHz)
 +
** 1  CLK/512 (6000kHz) ?
 +
** 2  CLK/256 (12000kHz) ?
 +
** 3  CLK/128 (24000kHz) ?
 +
 
 +
|-
 +
| 053h  ||colspan="4"| ---
 +
|-
 +
| 054h  ||colspan="4"| ---
 +
|-
 +
| 055h  ||colspan="4"| ---
 +
|-
 +
| 056h  ||colspan="4"| ---
 +
|-
 +
| 057h  ||colspan="4"| ---
 +
|-
 +
| 058h  ||colspan="4"| ---
 +
|-
 +
| 059h  ||colspan="4"| ---
 +
|-
 +
| 05Ah  ||colspan="4"| ---
 +
|-
 +
| 05Bh  ||colspan="4"| ---
 +
|-
 +
| 05Ch  ||colspan="4"| ---
 +
|-
 +
| 05Dh  ||colspan="4"| ---
 +
|-
 +
| 05Eh  ||colspan="4"| ---
 +
|-
 +
| 05Fh  ||colspan="4"| ---
 +
|-
 +
| 060h  || RW  || <nowiki>***0*0**</nowiki>
 +
| REG_DISP_MODE
 +
| Режим отображения<br/>
 +
Биты:
 +
* 7 - количество цвето в плитках (0 = 4 цвета, 1 = 16 цветов)
 +
* 6 - режим отображения (0=WS, 1=WSC)
 +
* 5 - формат тайлов (0=packed, как в Mega Drive, или 1=layered, как в Game Gear)
 +
 
 +
|-
 +
| 061h  ||colspan="4"| ---
 +
|-
 +
| 062h  || RW  || <nowiki>0000000* (WSC)</nowiki><br/><nowiki>1000000* (SC)</nowiki>
 +
| REG_WSC_SYSTEM
 +
| Отсутствует на WonderSwan. Содержит информацию, система является WonderSwan color или SwanCrystal. Также можно позволяет выключить питание.<br/>
 +
Биты:
 +
* 7 - система (0=WonderSwan Color, 1=SwanCrystal)
 +
* 0 - значение 1 отключает систему.
 +
 
 +
|-
 +
| 063h  ||colspan="4"| ---
 +
|-
 +
| 064h  ||colspan="4"| ---
 +
|-
 +
| 065h  ||colspan="4"| ---
 +
|-
 +
| 066h  ||colspan="4"| ---
 +
|-
 +
| 067h  ||colspan="4"| ---
 +
|-
 +
| 068h  ||colspan="4"| ---
 +
|-
 +
| 069h  ||colspan="4"| ---
 +
|-
 +
| 06Ah  || RW  || <nowiki>********</nowiki>
 +
| REG_HYPER_CTRL
 +
| Hypervoice. Регистр связан с REG_HYPER_CHAN_CTRL<br/>
 +
Биты:
 +
* 7 - включено
 +
* 4-6 - ???
 +
* 2-3 режим масштабирования
 +
** 0 data <<3-vol
 +
** 1 data <<3-vol | (- 0x100 << 3-vol)
 +
** 2 data <<3-vol
 +
** 3 данные <<3
 +
* 0-1 = громкость
 +
 
 +
|-
 +
| 06Bh  || RW  || <nowiki>0**0****</nowiki>
 +
| REG_HYPER_CHAN_CTRL
 +
| Hypervoice. Регистр связан с REG_HYPER_CTRL<br/>
 +
Биты:
 +
* 6 - включает правый канал
 +
* 5 - включает левый канал
 +
* 0-3 - ???
 +
 
 +
|-
 +
| 06Ch  ||colspan="4"| ---
 +
|-
 +
| 06Dh  ||colspan="4"| ---
 +
|-
 +
| 06Eh  ||colspan="4"| ---
 +
|-
 +
| 06Fh  ||colspan="4"| ---
 +
|-
 +
| 070h  || R  ||
 +
| REG_UNK_70
 +
| Присутствует только на SwanCrystal. Имеет значение 0D0h
 +
|-
 +
| 071h  || R  || <nowiki>RRRRRRRR</nowiki>
 +
| REG_UNK_71
 +
| Присутствует только на SwanCrystal. Имеет значение 077h
 +
|-
 +
| 072h  || R  || <nowiki>RRRRRRRR</nowiki>
 +
| REG_UNK_72
 +
| Присутствует только на SwanCrystal. Имеет значение 0F7h
 +
|-
 +
| 073h  || R  || <nowiki>RRRRRRRR</nowiki>
 +
| REG_UNK_73
 +
| Присутствует только на SwanCrystal. Имеет значение 006h
 +
|-
 +
| 074h  || R  || <nowiki>RRRRRRRR</nowiki>
 +
| REG_UNK_74
 +
| Присутствует только на SwanCrystal. Имеет значение 0E2h
 +
|-
 +
| 075h  || R  || <nowiki>RRRRRRRR</nowiki>
 +
| REG_UNK_75
 +
| Присутствует только на SwanCrystal. Имеет значение 00Ah
 +
|-
 +
| 076h  || R  || <nowiki>RRRRRRRR</nowiki>
 +
| REG_UNK_76
 +
| Присутствует только на SwanCrystal. Имеет значение 0EAh
 +
|-
 +
| 077h  || R  || <nowiki>RRRRRRRR</nowiki>
 +
| REG_UNK_77
 +
| Присутствует только на SwanCrystal. Имеет значение 0EEh
 +
|-
 +
| 078h  ||colspan="4"| ---
 +
|-
 +
| 079h  ||colspan="4"| ---
 +
|-
 +
| 07Ah  ||colspan="4"| ---
 +
|-
 +
| 07Bh  ||colspan="4"| ---
 +
|-
 +
| 07Ch  ||colspan="4"| ---
 +
|-
 +
| 07Dh  ||colspan="4"| ---
 +
|-
 +
| 07Eh  ||colspan="4"| ---
 +
|-
 +
| 07Fh  ||colspan="4"| ---
 +
|-
 +
| 080h  || RW  ||rowspan="8"| <nowiki>00000*** ********</nowiki>
 +
| REG_SND_CH1_PITCH (Low)
 +
|rowspan="8"| Значение частоты канала
 +
|-
 +
| 081h  || RW  || REG_SND_CH1_PITCH (High)
 +
|-
 +
| 082h  || RW  || REG_SND_CH2_PITCH (Low)
 +
|-
 +
| 083h  || RW  || REG_SND_CH2_PITCH (High)
 +
|-
 +
| 084h  || RW  || REG_SND_CH3_PITCH (Low)
 +
|-
 +
| 085h  || RW  || REG_SND_CH3_PITCH (High)
 +
|-
 +
| 086h  || RW  || REG_SND_CH4_PITCH (Low)
 +
|-
 +
| 087h  || RW  || REG_SND_CH4_PITCH (High)
 +
|-
 +
| 088h  || RW  ||rowspan="4"| <nowiki>********</nowiki>
 +
| REG_SND_CH1_VOL
 +
|rowspan="4"| Громкость канала<br/>
 +
Биты:
 +
* 4-7 - громкость слева
 +
* 0-3 - громкость справа
 +
Для Voice весь регистр является значением PCM
 +
|-
 +
| 089h  || RW  || REG_SND_CH2_VOL
 +
|-
 +
| 08Ah  || RW  || REG_SND_CH3_VOL
 +
|-
 +
| 08Bh  || RW  || REG_SND_CH4_VOL
 +
|-
 +
| 08Ch  || RW  || <nowiki>********</nowiki>
 +
| REG_SND_SWEEP_VALUE
 +
| Значение sweep для канала 3 в режиме sweep
 +
|-
 +
| 08Dh  || RW  || <nowiki>000*****</nowiki>
 +
| REG_SND_SWEEP_TIME
 +
| Тайминг sweep для канала 3 в режиме sweep
 +
|-
 +
| 08Eh  || RW  || <nowiki>000*****</nowiki>
 +
| REG_SND_NOISE
 +
| Настройка шума для канала 4 в шумовом режиме. При изменении режима шума нужно также установить бит сброса.<br/>
 +
Биты:
 +
* 4 - вкл/выкл
 +
* 3 - сброс
 +
* 0-2 - режим
 +
 
 +
|-
 +
| 08Fh  || RW  || <nowiki>********</nowiki>
 +
| REG_SND_WAVE_BASE
 +
| Указатель на волновую таблица. Значение регистра должно быть по адресу >> 6.
 +
|-
 +
| 090h  || RW  || <nowiki>***0****</nowiki>
 +
| REG_SND_CTRL
 +
| Включает каналы и меняет режим их работы<br/>
 +
Биты:
 +
* 7 - режим канала 4 (0=Wave, 1=Noise)
 +
* 6 - режим канала 3 (0=No Sweep, 1=Sweep)
 +
* 5 - режим канала 2 (0=Wave, 1=Voice)
 +
* 4 - не используется
 +
* 3 - канал 4 работает
 +
* 2 - канал 3 работает
 +
* 1 - канал 2 работает
 +
* 0 - канал 1 работает
 +
 
 +
|-
 +
| 091h  || RW  || <nowiki>R000****</nowiki>
 +
| REG_SND_OUTPUT
 +
| Выходной контроль<br/>
 +
Биты:
 +
* 7 - подключение наушников
 +
* 3 - наушники вкл.
 +
* 1-2  Сдвиг громкости основного динамика. Значение, отправленное на ШИМ динамика, сдвигается на это количество бит вниз
 +
* 0 - основной динамик вкл.
 +
 
 +
|-
 +
| 092h  || R  ||rowspan="2"| <nowiki>0RRRRRRR RRRRRRRR</nowiki> || REG_SND_RANDOM (Low)
 +
|rowspan="2"| Текущее значение шума LFSR
 +
|-
 +
| 093h  || R  || REG_SND_RANDOM (High)
 +
|-
 +
| 094h  || RW  || <nowiki>0000****</nowiki>
 +
| REG_SND_VOICE_CTRL
 +
| Стереэффект PCM voice
 +
 
 +
Биты полной громкости переопределяют биты половинной громкости.
 +
 
 +
Биты:
 +
* 3 - Левый канал вкл. (половинная громкость)
 +
* 2 - Левый канал вкл. (полная громкость)
 +
* 1 - Правый канал вкл. (половинная громкость)
 +
* 0 - Правый канал вкл. (полная громкость)
 +
 
 +
|-
 +
| 095h  || RW  || <nowiki>********</nowiki>
 +
| REG_SND_HYPERVOICE
 +
| Неизвестно. Вероятно, Hypervoice-семплы
 +
|-
 +
| 096h  || RW  ||rowspan="2"| <nowiki>000000** ******** (WS)</nowiki><br/><nowiki>00000000 00000000 (WSC+SC)</nowiki>
 +
| REG_SND_9697 (Low)
 +
|rowspan="2"| Неизвестно
 +
|-
 +
| 097h  || RW  || REG_SND_9697 (High)
 +
|-
 +
| 098h  || RW  ||rowspan="2"| <nowiki>000000** ******** (WS)</nowiki><br/><nowiki>00000000 00000000 (WSC+SC)</nowiki>
 +
| REG_SND_9899 (Low)
 +
|rowspan="2"| Неизвестно
 +
|-
 +
| 099h  || RW  || REG_SND_9899 (High)
 +
|-
 +
| 09Ah  || R  || <nowiki>00000111 (WS)</nowiki><br/><nowiki>00000000 (WSC+SC)</nowiki>
 +
| REG_SND_9A
 +
| Неизвестно
 +
|-
 +
| 09Bh  || R  || <nowiki>11111110 (WS)</nowiki><br/><nowiki>00000000 (WSC+SC)</nowiki>
 +
| REG_SND_9B
 +
| Неизвестно
 +
|-
 +
| 09Ch  || R  || <nowiki>11111111 (WS)</nowiki><br/><nowiki>00000000 (WSC+SC)</nowiki>
 +
| REG_SND_9C
 +
| Неизвестно
 +
|-
 +
| 09Dh  || R  || <nowiki>11111111 (WS)</nowiki><br/><nowiki>00000000 (WSC+SC)</nowiki>
 +
| REG_SND_9D
 +
| Неизвестно
 +
|-
 +
| 09Eh  || R  || <nowiki>000000**</nowiki>
 +
| REG_SND_9E
 +
| Неизвестно
 +
|-
 +
| 09Fh  ||colspan="4"| ---
 +
|-
 +
| 0A0h  || RW
 +
|
 +
<nowiki>+000**0+ (WS)</nowiki><br/>
 +
<nowiki>+000**1+ (SC/WSC)</nowiki><br/>
 +
<nowiki>+++++*1+ (SC в WS mode)</nowiki>
 +
| REG_HW_FLAGS
 +
| Единственным реальным использованием этого регистра является проверка системы с цветом.<br/>
 +
Биты:
 +
* 7 - System BIST passed (заблокировано)
 +
* 4-6 - Неизвестно, что SC в режиме WS
 +
* 3 - скорость ПЗУ картриджей (0=3 цикла, 1=1 цикл)
 +
* 2 - Разрядность внешней шины (0=8bit, 1=16bit). Большинство
 +
* 1 - система (0=WonderSwan, 1=WonderSwan Color)
 +
* 0 BIOS bank out (заблокировано) (0=BIOS mapped, 1=Cart mapped)
 +
 
 +
|-
 +
| 0A1h  ||colspan="4"| ---
 +
|-
 +
| 0A2h  || RW  || <nowiki>0000****</nowiki>
 +
| REG_TMR_CTRL
 +
| Управление таймеров
 +
 
 +
Биты:
 +
* 3 - режима таймера V-Blank (0=один раз, 1=автоповтор)
 +
* 2 - таймер V-Blank вкл/выкл
 +
* 1 - режима таймера H-Blank (0=один раз, 1=автоповтор)
 +
* 0 - таймер H-Blank Timer вкл/выкл
 +
 
 +
|-
 +
| 0A3h  ||colspan="4"| ???
 +
|-
 +
| 0A4h  || RW  ||rowspan="2"| <nowiki>******** ********</nowiki>
 +
| REG_HTMR_FREQ (Low)
 +
|rowspan="2"| Частота таймера H-Blank
 +
|-
 +
| 0A5h  || RW  || REG_HTMR_FREQ (High)
 +
|-
 +
| 0A6h  || RW  ||rowspan="2"| <nowiki>******** ********</nowiki>
 +
| REG_VTMR_FREQ (Low)
 +
|rowspan="2"| Частота таймера V-Blank
 +
|-
 +
| 0A7h  || RW  || REG_VTMR_FREQ (High)
 +
|-
 +
| 0A8h  || R  ||rowspan="2"| <nowiki>RRRRRRRR RRRRRRRR</nowiki>
 +
| REG_HTMR_CTR (Low)
 +
|rowspan="2"| Текущее значение счётчика таймера H-Blank
 +
|-
 +
| 0A9h  || R  || REG_HTMR_CTR (High)
 +
|-
 +
| 0AAh  || R  ||rowspan="2"| <nowiki>RRRRRRRR RRRRRRRR</nowiki>
 +
| REG_VTMR_CTR (Low)
 +
|rowspan="2"| Текущее значение счётчика таймера V-Blank
 +
|-
 +
| 0ABh  || R  || REG_VTMR_CTR (High)
 +
|-
 +
| 0ACh  ||colspan="4"| ???
 +
|-
 +
| 0ADh  ||colspan="4"| ---
 +
|-
 +
| 0AEh  ||colspan="4"| ---
 +
|-
 +
| 0AFh  ||colspan="4"| ---
 +
|-
 +
| 0B0h  || RW  || <nowiki>*******0 (WSC + SC)</nowiki><br/><nowiki>*****011 (WS)</nowiki>
 +
| REG_INT_BASE
 +
| Смещение номера прерывания для аппаратных прерываний. Нижние 3 бита игнорируются аппаратным обеспечением генерации прерываний, поэтому их можно игнорировать. Фактические сгенерированные номера прерываний: (REG_INT_BASE & 0F8h) / intnum
 +
|-
 +
| 0B1h  || RW  || <nowiki>********</nowiki>
 +
| REG_SER_DATA
 +
| Байты связи. Используются как для передачи, так и для приема
 +
|-
 +
| 0B2h  || RW  || <nowiki>********</nowiki>
 +
| REG_INT_ENABLE
 +
| Включение аппаратных прерываний.
 +
 
 +
Биты:
 +
* 7 - таймер HBlank
 +
* 6 - начало VBlank
 +
* 5 - таймер VBlank
 +
* 4 - Обнаружение рисования линий
 +
* 3 - Последовательный приём данных
 +
* 2 - RTC Alarm
 +
* 1 - Нажатие кнопок
 +
* 0 - Последовательная передача данных
 +
 
 +
|-
 +
| 0B3h  || RW  || <nowiki>**R00RRR</nowiki>
 +
| REG_SER_STATUS
 +
| Статус передачи и направление
 +
 
 +
Биты:
 +
* 7 - Включение передачи
 +
* 6 - Скорость передачи (0=9600, 1=38400)
 +
* 5 - Сброс Переполнения
 +
* 2 - Отправка пустого буфера/завершение передачи
 +
* 1 - Переполнение/ошибка
 +
* 0 - Завершение приёма
 +
 
 +
|-
 +
| 0B4h  || R  || <nowiki>RRRRRRRR</nowiki>
 +
| REG_INT_STATUS
 +
| Битовая маска для текущих вызваннных аппаратных прерываний. Используемые биты совпадают с номерами прерываний.
 +
 
 +
REG_INT_ENABLE не влияет на этот регистр.
 +
|-
 +
| 0B5h  || RW  || <nowiki>0***RRRR</nowiki>
 +
| REG_KEYPAD
 +
| Кнопки управления
 +
 
 +
Биты:
 +
* Запись/чтение
 +
** 6 - чтение кнопок
 +
** 5 - чтение X-кнопок
 +
** 4 - чтение Y-кнопок
 +
* Чтение:
 +
** 3 - B, X4, Y4
 +
** 2 - A, X3, Y3
 +
** 1 - Start, X2, Y2
 +
** 0 - X1, Y1
 +
 
 +
|-
 +
| 0B6h  ||  W  || <nowiki>WWWWWWWW</nowiki>
 +
| REG_INT_ACK
 +
| Подтверждение прерывания. Каждый установленный бит будет подтверждать соответствующее прерывание, очищенные биты не действуют.
 +
 
 +
REG_INT_ENABLE не влияет на этот регистр.
 +
 
 +
Чтение этого регистра возвращает 0.
 +
 
 +
Биты:
 +
* 7 - таймер HBlank
 +
* 6 - начало VBlank
 +
* 5 - таймер VBlank
 +
* 4 - Обнаружение рисования линий
 +
* 3 - Последовательный приём данных
 +
* 2 - RTC Alarm
 +
* 1 - Нажатие кнопок
 +
* 0 - Последовательная передача данных
 +
 
 +
|-
 +
| 0B7h  ||colspan="4"| ???
 +
|-
 +
| 0B8h  ||colspan="4"| ---
 +
|-
 +
| 0B9h  ||colspan="4"| ---
 +
|-
 +
| 0BAh  || RW  ||rowspan="2"| <nowiki>******** ********</nowiki>
 +
| REG_IEEP_DATA (Low)
 +
|rowspan="2"| Data port
 +
|-
 +
| 0BBh  || RW  || REG_IEEP_DATA (High)
 +
|-
 +
| 0BCh  || RW  ||rowspan="2"| <nowiki>******** ********</nowiki>
 +
| REG_IEEP_ADDR (Low)
 +
|rowspan="2"| адресный порт и порт управления
 +
 
 +
1 Кбит:
 +
* 8 - начало
 +
* 6-7 - Команда (0=расширенная команда, 1=запись, 2=чтение, 3=стереть)
 +
* 0-5 - адрес
 +
 
 +
16 Кбит:
 +
* 12 - начало
 +
* 10-11 - Команда (0=расширенная команда, 1=запись, 2=чтение, 3=стереть)
 +
* 0-9 - адрес
 +
 
 +
Расширенные команды (верхние 2 бита адреса)
 +
* 0 - EWDS (запись выкл.)
 +
* 1 - WRAL (записать всё.)
 +
* 2 - ERAL (Стереть всё)
 +
* 3 - EWEN (запись вкл.)
 +
 
 +
|-
 +
| 0BDh  || RW  || REG_IEEP_ADDR (High)
 +
|-
 +
|rowspan="2"| 0BEh  || R  || <nowiki>000000**</nowiki>
 +
| REG_IEEP_STATUS
 +
| Порт статуса
 +
 
 +
Биты:
 +
* 1 - Запись завершена
 +
* 0 - Чтение завершено
 +
 
 +
|-
 +
| W  || <nowiki>0***0000</nowiki>
 +
| REG_IEEP_CMD
 +
| Тип поведения. Также запуск команды. Установка более одного бита ничего не вызывает.
 +
 
 +
Биты:
 +
* 6 - Защита
 +
* 5 - Запись
 +
* 4 - Чтение
 +
 
 +
|-
 +
| 0BFh  ||colspan="4"| ???
 +
|-
 +
| 0C0h  || RW  || <nowiki>********</nowiki>
 +
| REG_BANK_ROM2
 +
| Выбор банка ROM (сегменты 4-F)
 +
 
 +
Регистр содержит верхние биты банка ПЗУ, используемые для доступа к ROM2; нижние 4 бита банка - это верхние 4 бита адреса, к которому осуществляется доступ в этом диапазоне. Все 8 бит сохраняют состояние.
 +
 
 +
В маппере 2001 выводится только 4 бита, в 2003 - 6
 +
 
 +
Например, для значения регистра 0F4h и адреса доступа 056789h результирующий адрес ПЗУ будет 0456789h для маппера 2001 и 03456789h для маппера 2003.
 +
 
 +
|-
 +
| 0C1h  || RW  || <nowiki>********</nowiki>
 +
| REG_BANK_SRAM
 +
| Выбор банка SRAM
 +
 
 +
Пример: для значения регистра 034h и адреса обращения к 015678h результирующий адрес SRAM будет 0345678h.
 +
|-
 +
| 0C2h  || RW  || <nowiki>********</nowiki>
 +
| REG_BANK_ROM0
 +
| Выбор банка ROM0 (сегмент 2).
 +
 
 +
Пример: для значения регистра 034h и адреса доступа 025678h результирующий адрес ПЗУ будет 0345678h.
 +
|-
 +
| 0C3h  || RW  || <nowiki>********</nowiki>
 +
| REG_BANK_ROM1
 +
| Выбор банка ROM1 (сегмент 3).
 +
 
 +
Пример: для значения регистра 034h и адреса доступа 025678h результирующий адрес ПЗУ будет 0345678h.
 +
|-
 +
| 0C4h  || RW  ||rowspan="2"| <nowiki>******** ********</nowiki>
 +
| REG_EEP_DATA (Low)
 +
|rowspan="2"| Data port картриджа
 +
|-
 +
| 0C5h  || RW  || REG_EEP_DATA (High)
 +
|-
 +
| 0C6h  || RW  ||rowspan="2"|
 +
| REG_EEP_ADDR (Low)
 +
|rowspan="2"| адресный порт и порт управления картриджа
 +
 
 +
1 Кбит:
 +
* 8 - начало
 +
* 6-7 - Команда (0=расширенная команда, 1=запись, 2=чтение, 3=стереть)
 +
* 0-5 - адрес
 +
 
 +
16 Кбит:
 +
* 12 - начало
 +
* 10-11 - Команда (0=расширенная команда, 1=запись, 2=чтение, 3=стереть)
 +
* 0-9 - адрес
 +
 
 +
Расширенные команды (верхние 2 бита адреса)
 +
* 0 - EWDS (запись выкл.)
 +
* 1 - WRAL (записать всё.)
 +
* 2 - ERAL (Стереть всё)
 +
* 3 - EWEN (запись вкл.)
 +
 
 +
|-
 +
| 0C7h  || RW  || REG_EEP_ADDR (High)
 +
|-
 +
| 0C8h  || R  ||
 +
| REG_EEP_STATUS
 +
| порт статуса картриджа
 +
 
 +
Биты:
 +
* 6 - Защита
 +
* 5 - Запись
 +
* 4 - Чтение
 +
* 3 - ??
 +
* 2 - ??
 +
* 1 - Запись завершена
 +
* 0 - Чтение завершено
 +
 
 +
|-
 +
| 0C8h  ||  W  ||
 +
| REG_EEP_CMD
 +
| Командный порт картриджа
 +
 
 +
Биты:
 +
* 6 - Защита
 +
* 5 - Запись
 +
* 4 - Чтение
 +
* 3 - ??
 +
* 2 - ??
 +
* 1 - Запись завершена
 +
* 0 - Чтение завершено
 +
 
 +
|-
 +
| 0C9h  ||colspan="4"| ???
 +
|-
 +
| rowspan="2"| 0CAh  || R  ||
 +
| REG_RTC_STATUS
 +
| Статус часов
 +
 
 +
Бит 7 - ожидание команды
 +
 
 +
|-
 +
| W  ||
 +
| REG_RTC_CMD
 +
| Команды часам
 +
 
 +
Запись:
 +
* $10 - Сброс
 +
* $12 - ??? будильник ???
 +
* $13 - ???
 +
* $14 - Установить время
 +
* $15 - Получить время
 +
Чтение:
 +
* бит 7 - Ack [HACK = 1]
 +
             
 +
|-
 +
| 0CBh  || RW  ||
 +
| REG_RTC_DATA
 +
| Данные часов
 +
 
 +
Запись:
 +
* 7 - ожидание команды
 +
 
 +
После команды ($CA):
 +
* $14 - 7 записей
 +
** год (+2000)
 +
** месяц
 +
** день
 +
** день недели
 +
** час
 +
** минута
 +
** секунда
 +
 
 +
чтение: после команды ($CA)
 +
* $13 - бит 7 - Ack [HACK = 1]
 +
* $15 - 7 записей
 +
** год (+2000)
 +
** месяц
 +
** день
 +
** день недели
 +
** час
 +
** минута
 +
** секунда
 +
 
 +
|-
 +
| 0CCh  || RW  || <nowiki>********</nowiki>
 +
| REG_GPO_EN
 +
| General-Purpose Outputs - выходные данные общего назначения, используются некоторыми мапперами, например, для светодиодов
 +
 
 +
Биты:
 +
* 4-7 - ????
 +
* 3 - GPO3 вкл
 +
* 2 - GPO2 вкл
 +
* 1 - GPO1 вкл
 +
* 0 - GPO0 вкл
 +
 
 +
|-
 +
| 0CDh  || RW  || <nowiki>********</nowiki>
 +
| REG_GPO_DATA
 +
| Биты:
 +
* 4-7 - ???
 +
* 3 - GPO3-данные (чтение записанного состояния)
 +
* 2 - GPO2-данные (чтение записанного состояния)
 +
* 1 - GPO1-данные (чтение записанного состояния)
 +
* 0 - GPO0-данные (чтение записанного состояния)
 +
 
 +
|-
 +
| 0CEh  || RW  ||
 +
| REG_WW_FLASH_CE
 +
| Порт ввода/вывода для WonderWitch, коммерческого комплекта разработки, который использует Flash-ROM для хранения программ, а также OS и BIOS под названием Freya.
 +
 
 +
Flash-ROM может быть записан из WonderWitch, но нельзя одновременно писать код и выполнять. То есть нужно перебрасывать код в ОЗУ и выполнять его оттуда, чтобы записать данные на Flash-ROM
 +
 
 +
|-
 +
| 0CFh  ||colspan="4"| ???
 +
|-
 +
| 0D0h  ||colspan="4"| ???
 +
|-
 +
| 0D1h  ||colspan="4"| ???
 +
|-
 +
| 0D2h  ||colspan="4"| ???
 +
|-
 +
| 0D3h  ||colspan="4"| ???
 +
|-
 +
| 0D4h  ||colspan="4"| ???
 +
|-
 +
| 0D5h  ||colspan="4"| ???
 +
|-
 +
| 0D6h  ||colspan="4"| ???
 +
|-
 +
| 0D7h  ||colspan="4"| ???
 +
|-
 +
| 0D8h  ||colspan="4"| ???
 +
|-
 +
| 0D9h  ||colspan="4"| ???
 +
|-
 +
| 0DAh  ||colspan="4"| ???
 +
|-
 +
| 0DBh  ||colspan="4"| ???
 +
|-
 +
| 0DCh  ||colspan="4"| ???
 +
|-
 +
| 0DDh  ||colspan="4"| ???
 +
|-
 +
| 0DEh  ||colspan="4"| ???
 +
|-
 +
| 0DFh  ||colspan="4"| ???
 +
|-
 +
| 0E0h  ||colspan="4"| ???
 +
|-
 +
| 0E1h  ||colspan="4"| ???
 +
|-
 +
| 0E2h  ||colspan="4"| ???
 +
|-
 +
| 0E3h  ||colspan="4"| ???
 +
|-
 +
| 0E4h  ||colspan="4"| ???
 +
|-
 +
| 0E5h  ||colspan="4"| ???
 +
|-
 +
| 0E6h  ||colspan="4"| ???
 +
|-
 +
| 0E7h  ||colspan="4"| ???
 +
|-
 +
| 0E8h  ||colspan="4"| ???
 +
|-
 +
| 0E9h  ||colspan="4"| ???
 +
|-
 +
| 0EAh  ||colspan="4"| ???
 +
|-
 +
| 0EBh  ||colspan="4"| ???
 +
|-
 +
| 0ECh  ||colspan="4"| ???
 +
|-
 +
| 0EDh  ||colspan="4"| ???
 +
|-
 +
| 0EEh  ||colspan="4"| ???
 +
|-
 +
| 0EFh  ||colspan="4"| ???
 +
|-
 +
| 0F0h  ||colspan="4"| ???
 +
|-
 +
| 0F1h  ||colspan="4"| ???
 +
|-
 +
| 0F2h  ||colspan="4"| ???
 +
|-
 +
| 0F3h  ||colspan="4"| ???
 +
|-
 +
| 0F4h  ||colspan="4"| ???
 +
|-
 +
| 0F5h  ||colspan="4"| ???
 +
|-
 +
| 0F6h  ||colspan="4"| ???
 +
|-
 +
| 0F7h  ||colspan="4"| ???
 +
|-
 +
| 0F8h  ||colspan="4"| ???
 +
|-
 +
| 0F9h  ||colspan="4"| ???
 +
|-
 +
| 0FAh  ||colspan="4"| ???
 +
|-
 +
| 0FBh  ||colspan="4"| ???
 +
|-
 +
| 0FCh  ||colspan="4"| ???
 +
|-
 +
| 0FDh  ||colspan="4"| ???
 +
|-
 +
| 0FEh  ||colspan="4"| ???
 +
|-
 +
| 0FFh  ||colspan="4"| ???
 +
|}
 +
</spoiler>
  
 
==Ассемблеры==
 
==Ассемблеры==

Версия 22:26, 15 апреля 2019

Описание

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.

Память

Клик

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

Клик


Ассемблеры

  • nasm

Инструменты

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

Эмуляторы

Хоумбрю