Pixelrat (обсуждение | вклад) |
Pixelrat (обсуждение | вклад) (→Описание) |
||
Строка 5: | Строка 5: | ||
* http://daifukkat.su/docs/wsman/ | * http://daifukkat.su/docs/wsman/ | ||
− | {{textcolor| | + | {{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 объединить данные и создать общие карту, набор плиток и палитры.
Эмуляторы
- Cygne Tracer (с дебаггером)
- Другие эмуляторы
Хоумбрю
- Swan-Driving (с исходниками)
- Swan-Driving (ч/б версия) (с исходниками)
- демо от Orion (с исходниками)