Ассемблеры
Инструменты
- bmp2swan - конвертер 16-цветного BMP-файла в тайлы, палитру и карту. Поддерживается отражение по вертикали и горизонтали.
- SwanLayer Merger - инструмент для объединения данных, нужен в случае, когда на изображение требуется больше 16 цветов: нужно разделить изображения на несколько 16-цветных BMP, сконвертировать при помощи bmp2swan, затем в SwanLayer Merger объединить данные и создать общие карту, набор плиток и палитры.
- WonderSwan Total Sound Driver (WTD)
Эмуляторы
Хоумбрю
Описание
Материал ниже основан на данных источниках:
Процессор
Процессорное ядро - 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-разрядную шину данных (вход/выход разделены).
V30MZ Registers
-
V30MZ Prefix Instructions
-
V30MZ Transfer Instructions
-
V30MZ Arithmetic Instructions
-
V30MZ Logical Instructions
-
V30MZ Shift Instructions
-
V30MZ Compare Instructions
-
V30MZ Binary-coded Decimal Instructions
-
V30MZ I/O Instructions
-
V30MZ Interrupt Instructions
-
V30MZ Flag Instructions
-
V30MZ Misc. Instructions
-
V30MZ Branch Instructions
-
V30MZ String Instructions
-
ModRM byte
-
Opcode Map
-
Память
Клик
Память разделена на сегементы по 64 Kбит:
- 0 - RAM - 16 Kбит для WonderSwan / 64 Kбит для WonderSwan Color
- 1 - SRAM - 256 Kбит (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 .. так далее.
$C3 - Cегмент 3. Аналогично
$C0 - Cегменты 4-$F. Биты 0...3 порта $C0 - это биты 4...7 номера ROM-банка в сегментах 4-$F. Биты 0...3 берутся из номера сегмента, например, IO[$C0]=$4E -> сегмент 9 содержит ROM bank $E9.
Карта памяти
| Адрес |
Содержит |
Шина |
Время доступа
|
| 000000h-00FFFFh |
Встроенное ОЗУ |
16-bit |
1 цикл
|
Пояснение:
Для WS и WSC:
- 000000h - 001FFFh - Встроенное ОЗУ (область 16 Kбит)
- 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-битное слово считывается из палитрового ОЗУ и выводится на экран.
Порты ввода/вывода
Клик
Дисплей
Клик
Разрешение дисплея WonderSwan равно 224х144
Дисплей WonderSwan может отображать 12 оттенков серого цвета, дисплеи WonderSwan Color и SwanCrystal способны отображать 12-битный RGB (4096 цветов).
Дисплейные тайминги:
0 224 256
-----------------
0| | |
| | |
| | |
| | |
144|-------------- |
159|_________________|
PIXCLK = 3.072MHz
HDISP = 224
HBLANK = 32
HTOTAL = 256
HCLK = 12kHz (3072000 / 256)
VDISP = 144
VBLANK = 15
VTOTAL = 159
VCLK = ~75.47Hz (12000 / 159)
Когда контроллер дисплея обращается к памяти, процессор не приостанавливается.
Палитры
Видеорежим задаётся в регистре REG_DISP_MODE. В зависимости от выбранного режима используются разные данные.
В монохромном режиме палитры управляются регистрами REG_PALMONO_POOL и REG_PALMONO.
REG_PALMONO_POOL создаёт пул из 8 оттенков, из которых собираются окончательные палитры. Цвета 4-битные: 00 - самый яркий, 0Fh - самый тёмный.
Регистры REG_PALMONO выбирает из пула по 4 цвета в каждую из 16 палитр.
Палитры 0-3 и 8-11 не имеют прозрачности. Палитры 4-7 и 12-15 используют цвет 0 в качестве прозрачного.
В цветном режиме регистры монохромных палитр игнорируются, палитры хранятся в оперативной памяти по адресу 00FE00h - 00FFFFh (1 слово на цвет, 16 цветов на палитру).
Палитры в режимах цветного видео полностью игнорируют монохромные регистры палитр, вместо этого сохраняя палитры в оперативной памяти.
В этих режимах палитры хранятся в оперативной памяти при 0FE00h, 1 слово на цвет, 16 цветов на палитру. В 4-цветном (2BPP) режиме 12 последних цветов каждой палитры равны цвету фона.
У всех палитр цвет 0 прозрачен, если не используется в качестве фона в регистре REG_BACK_COLOR
Формат ввода цвета:
- 8-11 - Red
- 4-7 - Green
- 0-3 - Blue
Тайлы
Все плитки имеют размер 8х8. Формат тайлов и их размещение в памяти зависит от режима, выбранного в REG_DISP_MODE.
4-цветные (2BPP) тайлы располагаются в ОЗУ по адресу 002000h - 003FFFh. В WonderSwan (и WonderSwan Color в режиме WS) здесь может хранится только 512 (0200h) тайлов. В цветном режиме здесь может храниться до 1024 (0400h) тайлов. Спрайты используют только первые 512 тайлов, верхние 512 тайлов могут использоваться только для фона, используя бит атрибута в записи каждой плитки. Каждый тайл занимает 16 байт.
Имеется два формата хранения данных в 4-цветном тайле:
- Planar Format - каждый байт определяет полную строку из 8 пикселей.
- Packed Format - каждый байт содержит все биты для 4 пикселей строки. Чётные байты определяют левые пиксели, нечётные - правые
16-цветные (4BPP) тайлы располагаются в ОЗУ, начиная с 004000h, и здесь может храниться до 1024 (0400h) тайлов. Спрайты используют только первые 512 тайлов, верхние 512 тайлов могут использоваться только для фона, используя бит атрибута в записи каждой плитки. Каждый тайл занимает 32 байта.
Имеется два формата хранения данных в 16-цветном тайле:
- Planar Format - каждый байт определяет полную строку из 8 пикселей.
- Packed Format - каждый байт содержит все биты для 2 пикселей строки. Байты по порядку определяют крайние левые пиксели, центральные левые, центральные правые, крайние правые.
Фоновые слои
WonderSwan имеет два фоновых слоя: BG (background, также SCR1) и FG (foreground, также SCR2). BG всегда ниже FG.
FG имеет функцию окна, которая настраивается с помощью регистра REG_SCR2_WIN
Расположение тайловых карт в памяти настраивается при помощи регистра REG_MAP_BASE
Каждый тайл в карте определяется 16-битным словом:
- 15 - отражение по вертикали
- 14 - отражение по горизонтали
- 13 - тайловый банк (только для WSC)
- 9-12 - палитра
- 0-8 - плитка
Фоны могут использовать все 16 палитр
Спрайты
Одновременно можно использовать 128 спрайтов, не более 32 на строке.
Расположение данных спрайтов в памяти можно менять при помощи REG_SPR_BASE.
Начальный спрайт определяется в REG_SPR_FIRST. Количество спрайтов назначается в REG_SPR_COUNT.
Все спрайты располагаются выше BG, есть флаг для отображения выше FG.
Приоритет рисования спрайтов отдаётся более ранним в списке.
Спрайты поддерживают обрезку окном, которое определяется регистрами REG_SPR_WIN. Каждый спрайт имеет флаг для рисования только внутри или снаружи окна. Спрайтовое окно может быть отключено.
Спрайты поддерживают горизонтальное и вертикальное отражение.
Спрайты отрисовываются построчно, но спрайтовая область ОЗУ копируется на 142 строке дисплея, препятствуя мультиплексированию спрайтов с растровыми эффектами.
Спрайты используют последние 8 палитр.
Формат
Запись каждого спрайта в спрайтовой таблице использует 32-битный параметр типа DWORD.
- 24-31 - положение по оси х
- 16-23 - положение по оси y
- 15 - отражение по вертикали
- 14 - отражение по горизонтали
- 13 - положение относительно FG
- 12 - режим спрайтового окна (0=снаружи, 1=внутри)
- 9-11 - палитра
- 0-8 - плитка
Звук
Клик
Имеется 4 аудиоканала. Каждый канал может воспроизводить короткие семплы (4 бит, 16 байт (32 семпла = по 2 семпла на байты (биты 0-3 и 4-7)) с выбираемой частотой дискретизации = 3,072*10e6 / ((2048-N)x32 ) Гц , где N = 11-битное значение.
Громкость каждого канала регулируется отдельно, каждый канал с настраиваемой стереопанорамой
Канал 2 может воспроизводить 8-битные семплы (функция voice)
Канал 3 имеет функцию sweep
Канал 4 можно использовать как шумовой генератор
В WonderSwan Color имеется дополнительный PCM-канал (HyperVoice), но только для наушников.
Тайминги
Каждый звуковой канал обновляется полный цикл (3072000 Гц). sweep-секция обновляется каждый 256х32 такта (375 гц) ЦАП наушников обновляется каждый 128 тактов (24000 гц).
Высота (pitch)
Алгоритм регистра высоты: reg = 2048 - (3072000 / 32 / f)
Конвертация значения регистра обратно в частоту: f = 3072000 / 32 / (2048 - reg) Hz
Значение используется в регистрах REG_SND_CHx_PITCH.
Регистр хранит значение для сравнения обратного счётчика, который используется для перехода к следующему шагу в семпле. После воспроизведения каждого семпла внутренний счётчик сбрасывается до 2048, затем каждый такт уменьшается на 1. Как только внутренний счётчик будет равен регистру, будет выведен следующий семпл.
HyperVoice
См. регистры REG_HYPER_CTRL и REG_HYPER_CHAN_CTRL
Sweep
Каждый шаг в sweep происходит каждые (reg+1)*32*256 тактов.
С точки зрения реального времени: reg = (T/2.667ms)-1, где T - время в милисекундах.
Значение используется в регистре REG_SND_SWEEP_TIME.
Voice
Voice функционирует на канале 2, использует регистр REG_SND_CH2_VOL для передачи 8-bit PCM-данных.
Шум
Канал 4 может работать как шумовой канал.
Используется 15-битный LFSR со следующим алгоритмом:
noise_bit = (1 ^ (ctr >> 7) ^ (ctr >> tap)) & 1
ctr = (ctr << 1) | noise_bit
Настраиваемые значения tap:
- режим 0: tap = 14
- режим 1: tap = 10
- режим 2: tap = 13
- режим 3: tap = 4
- режим 4: tap = 8
- режим 5: tap = 6
- режим 6: tap = 9
- режим 7: tap = 11
Сброс шума устанавливает счетчик LFSR на 00000h. LFSR обновляется, когда включающий бит активен, а канал 4 включен, даже если канал 4 не находится в режиме шума.
Выходной сигнал шумового канала равен noise_bit, умноженный на 0Fh.
Кнопки
Проверка статус кнопок в порте 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, и последовательный контроллер перестаёт отвечать, пока не будет установлен бит сброса переполнения.
Синхронные передачи
Чтобы открыть последовательное соединение, установите бит разрешения и бит сброса превышения в REG_SER_STATUS.
Чтобы закрыть последовательную связь, очистите бит разрешения. Скорее всего, придётся подождать, пока поднимается пустая отправка.
Чтобы отправить символ, подождите, пока пустая отправка высоко поднимается, затем записывайте байт данных в REG_USER_DATA.
Чтобы получить символ, дождитесь, пока полученные данные поднимутся выше, а затем считайте байт данных из REG_SER_DATA. Если при ожидании было установлено Переполнение (Overrun) и оно произошло, выполните Overrun Reset.
Асинхронные передачи
???
Порты
REG_SER_DATA
REG_SER_STATUS
Внутренняя EEPROM
WonderSwan имеет внутреннюю EEPROM размером 1 Кбит (64x16 бит), используемую для хранения информации о пользователе и некоторых очень небольших объемов данных, сохраняемых игрой. WonderSwan Color имеет EEPROM размером 16 Кбит (1024x16 бит), где добавлены ещё еще несколько полей информации о пользователе и увеличена область для игровых сохранений.
Информация о владельце может быть установлена в программе IPL.
Порты
REG_IEEP_DATA
REG_IEEP_ADDR
REG_IEEP_STATUS
REG_IEEP_CMD
Использование ???
Информация о владельце
| Addr |
Size |
Description
|
| 060h |
10h |
Имя (схема кодирования указана ниже)
|
| 070h |
02h |
Год рождения
|
| 072h |
01h |
Месяц рождения
|
| 073h |
01h |
День рождения
|
| 074h |
01h |
Пол
|
| 075h |
01h |
Группа крови
|
| Для WSC/SC
|
| 080h |
03h |
Неизвестно
|
| 083h |
01h |
Флаги:
b7 - неизвестно
b6 - контрастность LCD (0 - низкая, 1 - высокая)
b0-1 - громкость по-умолчанию
|
| 084h |
01h |
Цвет имени:
00 - чёрный
01 - красный
02 - оранжевый
03 - жёлтый
04 - зелёный
и т.д.
|
Кодирование имени:
| Значение |
ASCII |
Описание
|
| 000h |
020h |
Пробел
|
| 001h-00Ah |
030h-039h |
Числа
|
| 00Bh-024h |
041h-05Ah |
Заглавные символы
|
| 025h |
003h |
Серде
|
| 026h |
00Dh |
Музыкальная нота
|
| 027h |
02Bh |
Плюс
|
| 028h |
02Dh |
Минус
|
| 029h |
03Fh |
Знак вопроса
|
| 02Ah |
02Eh |
Точка
|
DMA контроллер
Этот контроллер прямого доступа к памяти приостанавливает работу процессора во время передачи.
На WonderSwan все эти регистры не отображены. Информация о них верна для режима совместимости с WonderSwan на WonderSwan Color или SwanCrystal.
Контроллер DMA:
- передаёт данные в словах, все регистры обеспечивают выравнивание слов
- не может получить доступ к SRAM из-за 8-битной шины
- может передавать только в IRAM, нет способа указать пункт назначения за его пределами
Контроллер DMA имеет несколько режимов сбоя передачи. При быстром сбое передачи контроллер не запускается, процессор не останавливается. При медленном сбое передача занимает столько же времени, сколько и завершённая передача, только некоторые или все слова не будут переданы.
Случаи быстрого сбоя:
- длина равна 0
- источник указан как находящийся в SRAM
Случаи медленного сбоя:
- источник перемещается в SRAM - в этом случае слова передаются до момента сбоя
Передача данных контроллером занимает мало времени. Общее время передачи составляет 5 + 2n циклов, где n-количество передаваемых слов.
Порты
REG_DMA_SRC
REG_DMA_SRC_HI
REG_DMA_DST
REG_DMA_LEN
REG_DMA_CTRL
Sound DMA контроллер
На WonderSwan регистры Sound DMA не отображены. Информация о них верна для режима совместимости с WonderSwan на WonderSwan Color или SwanCrystal.
Порты
REG_SDMA_SRC
REG_SDMA_SRC_HI
REG_SDMA_LEN
REG_SDMA_LEN_HI
REG_SDMA_CTRL
Таймеры
Имеется 2 таймера обратного отчёта, которые можно использовать для запуска растровых событий, звука или чего-то ещё. Имеются однократный и зацикленный режимы.
Порты
REG_TMR_CTRL
REG_HTMR_FREQ
REG_VTMR_FREQ
REG_HTMR_CTR
REG_VTMR_CTR
Картридж
В большинстве случаев последниие 10 байт образа картриджа являются разделом метаданных.
ПЗУ WonderSwan содержат 10 - байтовый раздел метаданных в качестве последних 10 байтов образа ПЗУ. В большинстве случаев это верно, но некоторые тележки содержат неверную или вводящую в заблуждение информацию. Список этих игр приведен ниже
| Смещение
|
Размер
|
Описание
|
| -01h |
001h |
Должен быть равным нулю!
|
| 000h |
001h |
Идентификатор издателя
|
| 001h |
001h |
Система (0=WonderSwan, 1=WonderSwan Color)
|
| 002h |
001h |
Идентификатор игры
|
| 003h |
001h |
Версия игры
|
| 004h |
001h |
Размер ПЗУ:
- 000h - 1Mbit? (128KB)
- 001h - 2Mbit? (256KB)
- 002h - 4Mbit (512KB)
- 003h - 8Mbit (1MB)
- 004h - 16Mbit (2MB)
- 005h - 24Mbit (3MB)
- 006h - 32Mbit (4MB)
- 007h - 48Mbit (6MB)
- 008h - 64Mbit (8MB)
- 009h - 128Mbit (16MB)
|
| 005h |
001h |
Размер сохранения:
- 000h - отсутствует
- 001h - 64Kbit SRAM (8KB)
- 002h - 256Kbit SRAM (32KB)
- 003h - 1Mbit SRAM (128KB)
- 004h - 2Mbit SRAM (256KB)
- 005h - 4Mbit SRAM (512KB)
- 010h - 1Kbit EEPROM
- 020h - 16Kbit EEPROM
- 050h - 8Kbit EEPROM?
|
| 006h |
001h |
Флаги:
- b2 - Скорость доступа к ПЗУ (0=3 цикла, 1=1 цикл)
- b1 - разрядность шины ПЗУ (0=16-bit, 1=8-bit)
- b0 - ориентация (0=горизонтальная, 1=вертикальная)
|
| 007h |
001h |
RTC используется или нет (0=нет, 1=дат)
|
| 008h |
002h |
16-битная сумма всех слов ПЗУ, кроме этого. WonderWitch равно нулю.
|
Картриджи используют систему банков памяти. Имеется три банка ПЗУ и 1 банк SRAM.
Порты
REG_BANK_ROM2
REG_BANK_SRAM
REG_BANK_ROM0
REG_BANK_ROM1
Часы реального времени (RTC)
Для команд чтения каждое считывание из регистра REG_RTC_DATA будет подавать следующий байт из сдвигового регистра, поэтому убедитесь, что вы прочитали все соответствующие данные для команды.
Для команд записи нужно запистаь первый байт в REG_RTC_DATA перед отправкой команды, так как этот байт будет смещён. Для команд с длинными данными после отправки команды остальные байты выбейте через порт REG_RTC_DATA
Для записи команд вы должны записать первый байт в REG_RTC_DATA перед отправкой команды, так как этот байт данных немедленно смещается. Для команд с более длинными данными, после отправки команды, выбейте остальные байты через порт REG_RTC_DATA.
Команды
| Команда |
Код |
Ввод |
Вывод
|
| Сброс |
060h |
None |
None
|
| Чтение статуса |
062h |
None |
1 byte
|
| Запись статуса |
063h |
1 byte |
None
|
| Чтение даты |
064h |
None |
4 bytes (?)
|
| Запись даты |
065h |
4 bytes (?) |
None
|
| Чтение времени |
066h |
None |
3 bytes (?)
|
| Запись времени |
067h |
3 bytes (?) |
None
|
| Чтение звонка R0 |
068h |
- |
-
|
| Запись звонка R0 |
069h |
- |
-
|
| Чтение звонка R1 |
06Ah |
- |
-
|
| Запись звонка R1 |
06Bh |
- |
-
|
Регистр статуса/состояния
7 - POWER
6 - 24/12
5 - INTAE
4 - 0
3 - INTME
2 - 0
1 - INTFE
0 - 0
Регистр даты
0-7 - год
8-12 - месяц
16-21 - день
24-26 - день недели
32-37 - час
39 - перед/после полудня
40-46 - минуты
48-54 - секунды
55 - тест
Порты
REG_RTC_STATUS
REG_RTC_CMD
REG_RTC_DATA
ЭСППЗУ картриджа (EEPROM)
Порты
REG_EEP_DATA
REG_EEP_ADDR
REG_EEP_STATUS
REG_EEP_CMD
Выходы картриджа общего назначения
Порты
REG_GPO_EN
REG_GPO_DATA
WonderWitch
-