Управление функциями платы
Это общий список портов и регистров, используемых для управления функциями Spectrum Next.
Информация скопирована вручную из спецификации, поэтому, если что-то не так или отсутствует, проверьте репозиторий gitlab ядра ZX Next FPGA: ports.txt и nextreg.txt и changelog.md.
Обратите внимание, что эти списки генерируются автоматически и их нельзя редактировать напрямую. Чтобы изменить данные в порту или реестре, посетите его страницу. Чтобы добавить новый порт, нажмите здесь. Чтобы добавить новый регистр, нажмите здесь.
Отображенные порты Spectrum
Примечание о частичном декодировании
Большинство периферийных устройств Spectrum фактически не декодировали все 16 бит шины адреса; они проверяли только определенные биты и отвечали, если эти значения битов были установлены правильно, независимо от других битов. Столбец «битовая маска» для каждого порта показывает биты, которые проверяются устройством. Традиционно все «неиспользуемые» биты устанавливаются в 1, чтобы избежать конфликтов с другими устройствами, что является основой для заданных номеров портов; но в некоторых случаях могут использоваться альтернативные номера портов. Однако остерегайтесь создания конфликтов: в частности, любой порт, который не собирается обращаться к ULA, должен иметь установленный LSB, поскольку ULA проверяет только сброшенный LSB.
Неизвестно, будут ли встроенные устройства Next иметь это ограничение декодирования, но кажется разумным предположением, что они не будут, за исключением случаев, когда это необходимо для устаревшего кода.
С другой стороны, частичное декодирование может позволить использовать несколько кодов вывода, таких как OTIR, который обычно помещает счетчик цикла в верхнюю половину шины адреса, что делает его бесполезным, за исключением устройств, которые игнорируют эту верхнюю половину. Это причина, по которой некоторые регистры Next игнорируют верхнюю половину адреса порта.
Шестнадцатеричный | Десятичный | Маска | Описание | |
---|---|---|---|---|
Клавиатура | $**FE | 254 | %xxxx xxxx ---- ---0 where only one bit in x is 0 | Серия определенных портов, которые считывают нажатия клавиш клавиатуры. |
I2C clock | $103B | 4155 | %0001 0000 0011 1011 ?? | Устанавливает и считывает линию I2C SCL. |
I2C data | $113B | 4411 | %0001 0001 0011 1011 ?? | Устанавливает и считывает линию I2C SDA |
Порт доступа к Layer 2 | $123B | 4667 | %0001 0010 0011 1011 ?? | Включает Layer 2 и управляет страничной организацией экрана layer 2 в нижнюю память. |
UART TX | $133B | 4923 | %0001 0011 0011 1011 | Отправляет байт на последовательный порт. Если прочитать, сообщает, есть ли данные в буфере RX |
UART RX | $143B | 5179 | %0001 0100 0011 1011 | Считывает данные с последовательного порта, запись устанавливает скорость передачи |
Управление UART | $153B | 5435 | %0001 0101 0011 1011 | Конфигурация интерфейсов UART |
Фрейм UART | $163B | 5691 | %0001 0110 0011 1011 | Фрейм UART |
Каналы CTC | $183B | 6203 | %0001 1XXX 0011 1011 | CTC 8 каналов 0x183b - 0x1f3b |
Управление страничной организацией памяти Plus 3 | $1FFD | 8189 | %0001 ---- ---- —0- | Управляет страничной организацией ROM и специальными настройками страничной организации из +2a/+3. |
TBBlue Register Select | $243B | 9275 | %0010 0100 0011 1011 | Выбирает активный порт для конфигурации функций TBBlue/Next. |
TBBlue Register Access | $253B | 9531 | %0010 0101 0011 1011 | Читает и/или записывает выбранный управляющий регистр TBBlue. |
Статус спрайта/Выбор слота | $303B | 12347 | %0011 0000 0011 1011 ?? | Устанавливает активный индекс атрибута спрайта и индекс слота шаблона, считывает статус спрайта. |
Управление страничной организацией памяти | $7FFD | 32765 | %01— ---- ---- —0- | Выбирает активную RAM, ROM и отображаемый экран. |
Информация AY | $BFF5 | 49141 | 1011111111110101 | Информация AY |
Запись в регистр звукового чипа | $BFFD | 49149 | %10— ---- ---- —0- | Записывает в выбранный регистр выбранного звукового чипа. |
Выбор банка памяти Next | $DFFD | 57341 | %1101 1111 1111 1101 | Предоставляет дополнительные биты выбора банка для расширенной памяти. |
DIVMMC | $E3 | 227 | Divmmc control | |
Страничная организация Pentagon 1024 | $EFF7 | 61431 | 1110111111110111 | Страничная организация в режиме Pentagon 1024K |
Кнопки мыши Kempston | $FADF | 64223 | %---- ---0 —0- ---- | Считывает кнопки на мыши Kempston. |
X координата мыши Kempston | $FBDF | 64479 | %---- -0-1 —0- ---- | X координата мыши Kempston, 0-255. |
Y координата мыши Kempston | $FFDF | 65503 | %---- -1-1 —0- ---- | Y координата мыши Kempston, 0-192. |
Управление Turbo Sound Next | $FFFD | 65533 | %11— ---- ---- —0- | Управляет стереоканалами и выбирает активный звуковой чип и канал звукового чипа. |
Порт MB02 DMA | $xx0B | 11 | ---- ---- 0000 1011 | Управляет чипом Z8410 DMA через стандарт MB02. |
Джойстик Kempston | $xx1F | 31 | %---- ---- 0001 1111 | Считывает движение джойстиков с использованием интерфейса Kempston. |
Джойстик Kempston 2, Joystick I/O | $xx37 | 55 | Второй вариант джойстика Kempston и управляет вводом-выводом джойстика. | |
Загрузка атрибута спрайта | $xx57 | 87 | %---- ---- 0101 0111 | Загружает позиции спрайтов, видимость, тип цвета и флаги эффектов. |
Загрузка шаблона спрайта | $xx5B | 91 | %---- ---- 0101 1011 ?? | Используется для загрузки шаблона выбранного спрайта. |
Порт Datagear DMA | $xx6B | 107 | ---- ---- 0110 1011 | Управляет чипом zxnDMA |
Выход SpecDrum DAC | $xxDF | 223 | %---- ---- —01 1111 | Выход на SpecDrum DAC. |
Порт управления ULA | $xxFE | 254 | Управляет цветом рамки и основными настройками звука Spectrum. | |
Управление видеорежимом Timex Sinclair | $xxFF | 255 | Управляет видеорежимами Timex Sinclair и цветами в режиме высокого разрешения. |
Регистры управления функциями Next/TBBlue
Определенные функции Next управляются с помощью этих номеров регистров, доступ к которым осуществляется через TBBlue Register Select ($243B / 9275) и TBBlue Register Access ($253B / 9531) или через opcode NEXTREG.
Номер | Читаемый | Записываемый | Описание | |
---|---|---|---|---|
Регистр ID машины | $00 | Да | Нет | Идентифицирует тип платы TBBlue. Должен всегда быть 10 (двоичный 0000 1010) на Next. |
Регистр версии ядра | $01 | Да | Нет | Идентифицирует версию ядра (FPGA image). |
Регистр сброса Next | $02 | Да | Да | Идентифицирует тип последнего сброса. Может быть записан для принудительного сброса. |
Регистр типа машины | $03 | Да | Да | Идентифицирует тайминги и тип машины. |
Регистр сопоставления конфигурации | $04 | Нет | Да | В режиме конфигурации позволяет отображать RAM в область ROM. |
Периферийный регистр 1 | $05 | Да | Да | Устанавливает режим джойстика, частоту видео и Scandoubler. |
Периферийный регистр 2 | $06 | Да | Да | Включает CPU Speed key, DivMMC, Multiface, Mouse и AY audio. |
Регистр скорости CPU | $07 | Да | Да | Устанавливает CPU Speed, считывает фактическую скорость. |
Периферийный регистр 3 | $08 | Да | Да | ABC/ACB Stereo, Internal Speaker, SpecDrum, Timex Video Modes, Turbo Sound Next, RAM contention and [un]lock 128k paging. |
Периферийный регистр 4 | $09 | Да | Да | Устанавливает scanlines, AY mono output, Sprite-id lockstep, reset DivMMC mapram and disable HDMI audio. |
Периферийный регистр 5 | $0A | Да | Да | Multiface type, Divmmc automap, Mouse buttons and DPI config |
Режим Joystick I/O | $0B | Да | Да | Управление вводом-выводом порта джойстика |
Регистр версии ядра (sub minor) | $0E | Да | Нет | Идентифицирует версию ядра (FPGA image) (sub minor number). |
Board ID | $0F | Да | Нет | Spectrum next issue ID |
Регистр защиты от сбоев | $10 | Да | Да | Используется в системе защиты от сбоев. |
Регистр синхронизации видео | $11 | Да | Да | Устанавливает вариант синхронизации видеовыхода. |
Регистр страницы оперативной памяти Layer 2 | $12 | Да | Да | Устанавливает номер банка, с которого начинается видеопамять Layer 2. |
Регистр страницы теневой оперативной памяти Layer 2 | $13 | Да | Да | Устанавливает номер банка, с которого начинается теневой экран Layer 2. |
Регистр глобальной прозрачности | $14 | Да | Да | Устанавливает «прозрачный» цвет для Layer 2, ULA и пиксельных данных LoRes. |
Регистр системы спрайтов и слоев | $15 | Да | Да | Включает/отключает Sprites и LoRes Layer, а также выбирает приоритет спрайтов и Layer 2. |
Регистр смещения X Layer 2 | $16 | Да | Да | Устанавливает смещение пикселей, используемое для рисования графики Layer 2 на экране. |
Регистр смещения Y Layer 2 | $17 | Да | Да | Устанавливает смещение Y, используемое при рисовании графики Layer 2 на экране. |
Регистр окна отсечения Layer 2 | $18 | Да | Да | Устанавливает и считывает окно отсечения для Layer 2. |
Регистр окна отсечения спрайтов | $19 | Да | Да | Устанавливает и считывает окно отсечения для спрайтов |
Регистр ULA/LoRes окна отсечения | $1A | Да | Да | Устанавливает и считывает окно отсечения для слоя ULA/LoRes. |
Регистр плиточной карты окна отсечения | $1B | Да | Да | Устанавливает и считывает окно отсечения для плиточной карты. |
Регистр управления окном отсечения | $1C | Да | Да | Управляет (сбрасывает) индексами регистров окна отсечения. |
Регистр MSB активной видеолинии | $1E | Да | Нет | Содержит MSB (только бит 0) растровой линии, которая в данный момент рисуется. |
Регистр LSB активной видеолинии | $1F | Да | Нет | Содержит восемь LSB растровой строки, которая в данный момент рисуется. |
Генерация маскируемого прерывания | $20 | Да | Да | Вызвать прерывание |
Регистр управления прерыванием видеолинии | $22 | Да | Да | Управляет синхронизацией растровых прерываний и прерывания кадра ULA. |
Регистр значения прерывания видеолинии | $23 | Да | Да | Содержит восемь младших битов строки, на которой должно произойти растровое прерывание. |
Зарезервировано | $24 | Нет | Нет | н/д |
Регистр смещения X ULA | $26 | Да | Да | Смещение пикселей по оси X (0..255) для использования при рисовании слоя ULA. |
Регистр смещения Y ULA | $27 | Да | Да | Смещение пикселей по оси Y (0..191) для использования при рисовании слоя ULA. |
Регистр старшего адреса Keymap | $28 | Да | Да | MSB адреса PS/2 Keymap, чтение (ожидание) первого байта цвета палитры |
Регистр младшего адреса Keymap | $29 | Нет | Да | LSB адреса PS/2 Keymap. |
Регистр старших данных Keymap | $2A | Нет | Да | Старшие данные в PS/2 Keymap (MSB данных в бите 0) |
Регистр младших данных Keymap | $2B | Нет | Да | Восемь младших LSB данных PS/2 Keymap. |
Регистр зеркала DAC B (слева) | $2C | Да | Да | Зеркало DAC B, чтение текущего I2S left MSB |
Регистр зеркала DAC A+D (моно) | $2D | Да | Да | Порт SpecDrum 0xDF / Зеркало DAC A+D, чтение текущего I2S LSB |
Регистр зеркала DAC C (справа) | $2E | Да | Да | Зеркало DAC C, чтение текущего I2S right MSB |
Регистр MSB смещения X Tilemap | $2F | Да | Да | Устанавливает смещение пикселей (два старших бита), используемое для рисования графики Tilemap на экране. |
Регистр LSB смещения X Tilemap | $30 | Да | Да | Устанавливает смещение пикселей (восемь младших битов), используемое для рисования графики Tilemap на экране. |
Регистр смещения Y Tilemap | $31 | Да | Да | Устанавливает смещение пикселей, используемое для рисования графики Tilemap на экране. |
Регистр смещения X LoRes | $32 | Да | Да | Смещение пикселей по оси X (0..255) для использования при рисовании слоя LoRes. |
Регистр смещения Y LoRes | $33 | Да | Да | Смещение пикселей по оси Y (0..191) для использования при рисовании слоя LoRes. |
Регистр индекса зеркала порта спрайта | $34 | Да | Да | Выбирает индекс спрайта 0..127, на который будут влиять записи в другие порты спрайта (и зеркала). |
Регистр атрибута 0 зеркала порта спрайта | $35 | Нет | Да | Зеркало порта Nextreg для записи непосредственно в «байт 1» Загрузка атрибута спрайта ($xx57 / 87). |
Регистр атрибута 1 зеркала порта спрайта | $36 | Нет | Да | Зеркало порта Nextreg для записи непосредственно в «байт 2» Загрузка атрибута спрайта ($xx57 / 87). |
Регистр атрибута 2 зеркала порта спрайта | $37 | Нет | Да | Зеркало порта Nextreg для записи непосредственно в «байт 3» Загрузка атрибута спрайта ($xx57 / 87). |
Регистр атрибута 3 зеркала порта спрайта | $38 | Нет | Да | Зеркало порта Nextreg для записи непосредственно в «байт 4» Загрузка атрибута спрайта ($xx57 / 87). |
Регистр атрибута 4 зеркала порта спрайта | $39 | Нет | Да | Зеркало порта Nextreg для записи непосредственно в «байт 5» Загрузка атрибута спрайта ($xx57 / 87). |
Регистр индекса палитры | $40 | Да | Да | Выбирает элемент палитры (индекс) для управления |
Регистр значения палитры | $41 | Да | Да | Используйте для установки/чтения 8-битных цветов палитры ULANext. |
Маска цвета чернил Enhanced ULA | $42 | Да | Да | Указывает маску для извлечения цвета чернил из значения ячейки атрибута в режиме ULANext. |
Регистр управления Enhanced ULA | $43 | Да | Да | Включает или отключает расширенную интерпретацию ULA значений атрибутов и переключает активную палитру. |
Расширение палитры Enhanced ULA | $44 | Да | Да | Используйте для установки 9-битных (2-байтовых) цветов расширенной палитры ULA или для чтения второго байта цвета. |
Регистр резервного цвета прозрачности | $4A | Да | Да | 8-битный цвет, который будет использоваться, когда все слои содержат прозрачный пиксель. |
Регистр индекса прозрачности спрайтов | $4B | Да | Да | Индекс в палитру спрайтов (прозрачного цвета). |
Регистр индекса прозрачности Tilemap | $4C | Да | Да | Индекс в палитру Tilemap (прозрачного цвета). |
Банк слота 0 управления памятью | $50 | Да | Да | Выбирает 8k-банк, хранящийся в 8k-слоте 0 (см. Карта памяти). |
Банк слота 1 управления памятью | $51 | Да | Да | Выбирает 8k-банк, хранящийся в 8k-слоте 1 (см. Карта памяти). |
Банк слота 2 управления памятью | $52 | Да | Да | Выбирает 8k-банк, хранящийся в 8k-слоте 2 (см. Карта памяти). |
Банк слота 3 управления памятью | $53 | Да | Да | Выбирает 8k-банк, хранящийся в 8k-слоте 3 (см. Карта памяти). |
Банк слота 4 управления памятью | $54 | Да | Да | Выбирает 8k-банк, хранящийся в 8k-слоте 4 (см. Карта памяти). |
Банк слота 5 управления памятью | $55 | Да | Да | Выбирает 8k-банк, хранящийся в 8k-слоте 5 (см. Карта памяти). |
Банк слота 6 управления памятью | $56 | Да | Да | Выбирает 8k-банк, хранящийся в 8k-слоте 6 (см. Карта памяти). |
Банк слота 7 управления памятью | $57 | Да | Да | Выбирает 8k-банк, хранящийся в 8k-слоте 7 (см. Карта памяти). |
Данные Copper | $60 | Нет | Да | Используется для загрузки кода в Copper. |
Младший байт управления Copper | $61 | Да | Да | Содержит младший байт Copper управляющих битов. |
Старший байт управления Copper | $62 | Да | Да | Содержит старший байт Copper управляющие флаги. |
16-битный регистр записи данных Copper | $63 | Нет | Да | Используется для загрузки кода в Коппер. |
Регистр смещения вертикальной видеолинии | $64 | Да | Да | Смещение нумерации растровых строк в copper/interrupt/active register |
Регистр управления ULA | $68 | Да | Да | Отключить ULA, контролирует смешивание/наложение ULA, включить ULA+ |
Регистр управления дисплеем 1 | $69 | Да | Да | Layer2, тень ULA, порт Timex $FF |
Регистр управления LoRes | $6A | Да | Да | Режим LoRes Radastan |
Регистр управления Tilemap | $6B | Да | Да | Управляет режимом Tilemap. |
Регистр атрибута Tilemap по умолчанию | $6C | Да | Да | Атрибут плитки по умолчанию только для 8-битных карт. |
Регистр базового адреса Tilemap | $6E | Да | Да | Базовый адрес плиточной карты 40x32 или 80x32 (аналогично текстовому режиму других компьютеров). |
Регистр базового адреса определений плит | $6F | Да | Да | Базовый адрес графики плиток. |
Регистр управления Layer 2 | $70 | Да | Да | Разрешение Layer 2, смещение палитры |
Регистр MSB смещения X Layer 2 | $71 | Да | Да | Устанавливает смещение пикселей, используемое для рисования графики Layer 2 на экране. |
Регистр атрибута 0 зеркала порта спрайта (с INC) | $75 | Нет | Да | То же, что и Регистр атрибута 0 зеркала порта спрайта ($35) (записать первый байт атрибутов спрайта), плюс увеличивает Регистр индекса зеркала порта спрайта ($34) |
Регистр атрибута 1 зеркала порта спрайта (с INC) | $76 | Нет | Да | То же, что и Регистр атрибута 1 зеркала порта спрайта ($36) |
Этот документ неполный и вскоре будет пересоздан