TS-Config — различия между версиями

Материал из SpeccyWiki
Перейти к: навигация, поиск
(Отмена правки 32273 участника Alone (обсуждение))
(Контроллер маскируемого прерывания)
Строка 28: Строка 28:
 
*биты в Page3 расположены: 7 6 5 4 3 2 1 0,
 
*биты в Page3 расположены: 7 6 5 4 3 2 1 0,
 
*dN - бит шины данных в момент записи в порт #7FFD.
 
*dN - бит шины данных в момент записи в порт #7FFD.
 +
 +
== Контроллер маскируемого прерывания ==
 +
В последнем машцикле текущей иструкции z80 опрашивает линию маскируемого прерывания ~INT. Если линия активна, завершается выполнение текущей иструкции, генерируется цикл подтверждения маскируемого прерывания (~IORQ || ~M1), на стек сохраняется текущее значение счетчика команд РС и выполняется переход на адрес процедуры обработки маскируемого прерывания.
 +
В режиме IM 2 в цикле подтверждения маскируемого прерывания с шины данных читается байт (D[7:0]), который используется для вычисления адреса процедуры обработки маскируемого прерывания. Вычисление производится следующим образом. Регистр вектора маскируемого прерывания (I[7:0]) используется в качестве старшего байта адреса таблицы, D[7:0] - младшего. Из памяти по полученному адресу читаются подряд 2 байта, образующих адрес процедуры обработки маскируемого прерывания (ISR), на который и выполняется переход.
 +
 +
В TS-Conf можно запрограммировать несколько источников маскируемого прерывания. Среди них:
 +
- кадровый (frame, приоритет 0),
 +
- строчный (line, приоритет 1),
 +
- сигнал окончания DMA транзакции (dma, приоритет 2).
 +
Каждый источник прерывания формирует сигнал ~INT и выставляет собственный байт D[7:0] на ШД в цикле ~IORQ || ~M1. В случае прихода нескольких событий одновременно, сначала обработается прерывание с меньшим приоритетом. При завершении ISR инструкциями EI : RET сразу произойдет обработка следующего по порядку ~INT, который разпознается в последнем машцикле инструкции RET.
 +
 +
Регистр конфигурации INTMask содержит биты разрешения индивидуального источника маскируемого прерывания, 0 - запрещен / 1 - разрешен. По ~RESET туда записывается значение $01: разрешен frame, все остальные запрещены. Если из ISR прерывания с меньшим приоритетом записать 0 в соответствующий бит маски источника прерывания, ожидающего в данный момент обработки, то произойдет его сброс и прерывание обработано не будет. Запись 1 не влияет на состояние ожидающего прерывания. Структура INTMask следующая:
 +
бит 0, FRAME - разрешение источника frame,
 +
бит 1, LINE - разрешение источника line,
 +
бит 2, DMA - разрешение источника dma,
 +
биты 3-7 - не используются, записывать 0.
 +
 +
Источник frame срабатывает, когда значение счетчиков растра совпадает с регистрами HSINT и VSINT.
 +
Источник line срабатывает в каждой строке, когда горизонтальный счетчик растра равен 0.
 +
Источник dma срабатывает после окончания любой транзакции DMA.
 +
 +
Таблица адресов ISR устроена следующим образом (предположим, что I - регистр вектора прерывания z80 содержит значение $80).
 +
$8000 .. $80D0 - не используются,
 +
$80D1 .. $80E0 - dma ISR,
 +
$80Е1 .. $80F0 - line ISR,
 +
$80F1 .. $8100 - frame ISR.
 +
Для каждого источника прерывания зарезервирован пул из 8 векторов. Для конфигурации векторов предназначен регистр IM2Vect. Его структра следующая:
 +
бит 0 - не используется, значение игнорируется,
 +
биты 1-3, A[3:1] - выбор вектора внутри пула,
 +
биты 4-6, INTSRC[2:0] - выбор записываемого пула,
 +
бит 7 - не используется, записывать 0.
 +
 +
INTSRC[2:0] может принимать следующие значения:
 +
0 (%000) - пул для frame,
 +
1 (%001) - пул для line,
 +
2 (%010) - пул для dma,
 +
3 (%011) .. 7 (%111) - не используются, запись этих значений запрещена.
 +
Запись в пул одного источника не влияет на остальные.
 +
 +
Структура пула (смещение от начала пула в байтах):
 +
A[3:1] = 0 (%000) - +$01
 +
A[3:1] = 1 (%001) - +$03
 +
..
 +
A[3:1] = 6 (%110) - +$0D
 +
A[3:1] = 7 (%111) - +$0F
 +
 +
Примеры (I = $80):
 +
1. IM2Vect = $0E (%00001110) (данная запись производится аппаратно по ~RESET для совместимости с классическим режимом)
 +
Запись в пул frame, выбран вектор 7, адрес таблицы ISR для источника frame равен $80FF..$8100.
 +
2. IM2Vect = $00 (%00000000)
 +
Запись в пул frame, выбран вектор 0, адрес таблицы ISR для источника frame равен $80F1..$80F2.
 +
3. IM2Vect = $2E (%00101000)
 +
Запись в пул dma, выбран вектор 4, адрес таблицы ISR для источника frame равен $80D9..$80DA.
 +
  
 
== Сравнение TS-Conf и Baseconf ==
 
== Сравнение TS-Conf и Baseconf ==

Версия 03:37, 16 декабря 2013

TS Tech Demo by r0bat

TS-Config (TS-Conf) - конфигурация для компьютера-конструктора ZX Evolution, разработанная TS-Labs.

Характеристики

  • Совместимость с Pentagon в версии 512кБ, расширение через биты 6,7 (и опционально - 5 порта #7FFD до 1024кБ, без дополнительных графических режимов). Совместимость с расширениями других клонов не предусмотрена[1].
  • Наличие аппаратного видеопроцессора (TSU), обеспечивающего отображение тайлов и спрайтов поверх основной графики.
  • Дополнительные графические режимы 16 и 256 цветов на точку.
  • Палитра - 256 ячеек с выбором из 64/15625 оттенков.
  • Текстовый режим с подгружаемым шрифтом.
  • Блиттер (копирование/наложение по маске прямоугольной области экрана).
  • Количество видеостраниц ограничено только количеством страниц памяти (256 видеостраниц для режима 6912).
  • DMA, в т.ч. для устройств Z-Controller и Nemo-IDE (SD-Card и IDE), внутренних массивов чипсета[2].
  • Процессорный кэш, частично устраняющий проблему торможения при доступе к памяти на частоте 14МГц.
  • Виртуальный TR-DOS с использованием внешних устройств для хранения имеджей (SD-Card, IDE, RS-232).
  • Программируемые позиция INT (с точностью до такта 3,5МГц) и младший байт вектора прерываний IM2.
  • Банкинг для любого окна памяти по границе 16кБ (#0000, #4000, #8000, #C000).
  • Виртуальное ПЗУ.

Расширение порта #7FFD

Аппаратно регистра, хранящего значение, записанное в #7FFD нет. Вместо этого, для адресации страницы в окне #C000 есть 8-битный регистр Page3, который линейно адресует страницы в диапазоне 0-255.

Биты LCK128[1:0] регистра MEMConfig выбирают 4 режима работы порта #7FFD:

  • 00 - 512кБ. Биты Page3: 0 0 0 d7 d6 d2 d1 d0.
  • 01 - 128кБ. Биты Page3: 0 0 0 0 0 d2 d1 d0.
  • 10 - 512/128к авто. Через OUT (#FD) - 128k / OUT (C), r - 512k.
  • 11 - 1024кБ. Бит 5 перестает работать защелкой 48к. Биты Page3: 0 0 d5 d7 d6 d2 d1 d0.

Где:

  • биты в Page3 расположены: 7 6 5 4 3 2 1 0,
  • dN - бит шины данных в момент записи в порт #7FFD.

Контроллер маскируемого прерывания

В последнем машцикле текущей иструкции z80 опрашивает линию маскируемого прерывания ~INT. Если линия активна, завершается выполнение текущей иструкции, генерируется цикл подтверждения маскируемого прерывания (~IORQ || ~M1), на стек сохраняется текущее значение счетчика команд РС и выполняется переход на адрес процедуры обработки маскируемого прерывания. В режиме IM 2 в цикле подтверждения маскируемого прерывания с шины данных читается байт (D[7:0]), который используется для вычисления адреса процедуры обработки маскируемого прерывания. Вычисление производится следующим образом. Регистр вектора маскируемого прерывания (I[7:0]) используется в качестве старшего байта адреса таблицы, D[7:0] - младшего. Из памяти по полученному адресу читаются подряд 2 байта, образующих адрес процедуры обработки маскируемого прерывания (ISR), на который и выполняется переход.

В TS-Conf можно запрограммировать несколько источников маскируемого прерывания. Среди них: - кадровый (frame, приоритет 0), - строчный (line, приоритет 1), - сигнал окончания DMA транзакции (dma, приоритет 2). Каждый источник прерывания формирует сигнал ~INT и выставляет собственный байт D[7:0] на ШД в цикле ~IORQ || ~M1. В случае прихода нескольких событий одновременно, сначала обработается прерывание с меньшим приоритетом. При завершении ISR инструкциями EI : RET сразу произойдет обработка следующего по порядку ~INT, который разпознается в последнем машцикле инструкции RET.

Регистр конфигурации INTMask содержит биты разрешения индивидуального источника маскируемого прерывания, 0 - запрещен / 1 - разрешен. По ~RESET туда записывается значение $01: разрешен frame, все остальные запрещены. Если из ISR прерывания с меньшим приоритетом записать 0 в соответствующий бит маски источника прерывания, ожидающего в данный момент обработки, то произойдет его сброс и прерывание обработано не будет. Запись 1 не влияет на состояние ожидающего прерывания. Структура INTMask следующая: бит 0, FRAME - разрешение источника frame, бит 1, LINE - разрешение источника line, бит 2, DMA - разрешение источника dma, биты 3-7 - не используются, записывать 0.

Источник frame срабатывает, когда значение счетчиков растра совпадает с регистрами HSINT и VSINT. Источник line срабатывает в каждой строке, когда горизонтальный счетчик растра равен 0. Источник dma срабатывает после окончания любой транзакции DMA.

Таблица адресов ISR устроена следующим образом (предположим, что I - регистр вектора прерывания z80 содержит значение $80). $8000 .. $80D0 - не используются, $80D1 .. $80E0 - dma ISR, $80Е1 .. $80F0 - line ISR, $80F1 .. $8100 - frame ISR. Для каждого источника прерывания зарезервирован пул из 8 векторов. Для конфигурации векторов предназначен регистр IM2Vect. Его структра следующая: бит 0 - не используется, значение игнорируется, биты 1-3, A[3:1] - выбор вектора внутри пула, биты 4-6, INTSRC[2:0] - выбор записываемого пула, бит 7 - не используется, записывать 0.

INTSRC[2:0] может принимать следующие значения: 0 (%000) - пул для frame, 1 (%001) - пул для line, 2 (%010) - пул для dma, 3 (%011) .. 7 (%111) - не используются, запись этих значений запрещена. Запись в пул одного источника не влияет на остальные.

Структура пула (смещение от начала пула в байтах): A[3:1] = 0 (%000) - +$01 A[3:1] = 1 (%001) - +$03 .. A[3:1] = 6 (%110) - +$0D A[3:1] = 7 (%111) - +$0F

Примеры (I = $80): 1. IM2Vect = $0E (%00001110) (данная запись производится аппаратно по ~RESET для совместимости с классическим режимом) Запись в пул frame, выбран вектор 7, адрес таблицы ISR для источника frame равен $80FF..$8100. 2. IM2Vect = $00 (%00000000) Запись в пул frame, выбран вектор 0, адрес таблицы ISR для источника frame равен $80F1..$80F2. 3. IM2Vect = $2E (%00101000) Запись в пул dma, выбран вектор 4, адрес таблицы ISR для источника frame равен $80D9..$80DA.


Сравнение TS-Conf и Baseconf

Аппаратная возможность Baseconf TS-Conf
Графический режим 16 цветов на точку Yes[3] Yes[4]
Графический режим 256 цветов на точку No Yes
Текстовый режим Yes[5] Yes[6]
Аппаратные скроллеры графического окна No Yes
Подгружаемый шрифт текстового режима Yes Yes
Чтение шрифта текстового режима Yes[7] Yes[8]
Количество ячеек палитры 16 256
Количество цветов палитры 64 15625[9]
Банкинг для всех окон памяти 16кБ Yes Yes
Включение ПЗУ в любое окно 16кБ Yes No
Выбор произвольного банка ПЗУ Yes Yes
Выбор произвольного набора банков ПЗУ Yes Yes[10]
Выбор произвольного набора банков ОЗУ для эмуляции ПЗУ No Yes[11]
Установка защиты записи для ОЗУ в окне памяти No Yes
Режим "открытых" портов TR-DOS Yes No
Аппаратный перехват обращений к портам TR-DOS No Yes
DMA для обмена данными с Z-Controller No Yes
DMA для обмена данными с IDE No Yes
DMA с режимом блиттера No Yes
DMA с режимом затирания страниц 2-байтным кодом No Yes
Аппаратные спрайты No Yes[12]
Аппаратные тайлы No Yes[13]
Кэш процессора Yes[14] Yes[15]
Программируемая позиция кадрового сигнала INT No Yes[16]
Контроллер маскируемого прерывания с приоритетизацией и пулом векторов No Yes
Источники INT 1 3[17]
Программируемое значение шины данных в цикле подтверждения прерывания IM2 No Yes
Генерация NMI по совпадению адреса в цикле М1 Yes No
NMI в ОЗУ с запоминанием страницы, включенной в #0000 Yes No

Ссылки

Сноски

  1. Также не предусмотрена совместимость с советским клоном ZX Spectrum АТМ турбо ни в каких его расширениях.
  2. Поддерживаются транзакции только по четным адресам ОЗУ, длина транзакции кратна 2 байтам.
  3. Режим "EGA" компьютера ATM Turbo 2 и режим 16col компьютера Pentagon 1024 SL 2.x
  4. С линейной адресацией
  5. Текстовый режим компьютера ATM Turbo 2 плюс дополнительный текстовый режим "всё в одной странице"
  6. С линейной адресацией
  7. Специальными ухищрениями
  8. Из ОЗУ
  9. Поскольку видео-ЦАП имеет разрядность 6 бит, используются аппаратные чанки с размером субпикселя 1/8. Режим совместим только с мониторами ЭЛТ (CRT). Без использования чанковых цветов, их количество - 64
  10. Выбор набора из 4-х последовательных страниц (SYS, TR-DOS, Basic128, Basic48), начиная с произвольной, кратной 4
  11. Аналогично предыдущему пункту
  12. 3 плоскости, 85 спрайтов на строку
  13. 2 плоскости, 4096 уникальных тайлов для каждой плоскости
  14. 1 слово 16 бит
  15. 256 слов 16 бит. Не учитывает изменений в ОЗУ, произведенных DMA, поэтому требует инвалидации при обращении к таким областям.
  16. С точностью до такта 3.5МГц
  17. Кадровый, строчный, окончание DMA транзакции