Агат/Техническая информация

Материал из Emuverse
Этот документ создан для Emuverse и распространяется на условиях лицензии CC-BY-SA-3.0.

Контроллер и дисковод 140к

  • Физические параметры: сторон: 1 (0), дорожек: 35 (0-34), секторов: 16 (0-15). Нумерация секторов от 0!
  • Используется свой алгоритм кодирования GCR 6.2, отличающийся от Apple Disk ][?
    • Пока замечено, что два «лишних» байта при кодировании первого блока «заворачиваются» на начало буфера, а в найденных эмуляторах Apple берутся нулевыми, что не влияет на раскодированные данные, но меняет контрольную сумму.
  • Порядок секторов 0x0,0xD,0xB,0x9,0x7,0x5,0x3,0x1,0xE,0xC,0xA,0x8,0x6,0x4,0x2,0xF — при этом в файле DSK они находятся именно в таком порядке, и при генерации NIB-трека их переставлять не нужно.
  • Как и в Apple Disk ][, число физических дорожек равно 70, но стандартно используется только каждая вторая, следовательно, номер дорожки в образе равен половине номера физической дорожки.

Документация по nib-формату:

Контроллер 840к

Регистры КНГМД 840

C0Y1 - R  - S  - Чтение слова состояния НГМД (D14.B)
C0Y2 - W  - RK - Запись управляющего слова контроллера (D14.C)
C0Y3 - W  - C1 - Управление битами RK и режим D14 (D14.mode)
C0Y4 - R  - ЧТ - Регистр данных при чтении (D15.A)
C0Y5 - W  - ЗП - Регистр данных при записи (D15.B)
C0Y6 - RW - RD - Сигналы управления (D15.C)
C0Y7 - W  - C2 - Управление битами RD и режим D15 (D15.mode)
C0Y8 - W  - Активация триггера синхронизации (по обращению)
C0Y9 - W  - Шаг головки (по обращению)
C0YA - W  - Сброс триггера синхронизации (по обращению)

S(1) - Слово состояния НГМД
---------------------------------
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---------------------------------
                          x   x     Тип НГМД 2 (00 - 2S2D, 01 - 1S2D, 
                  x   x             Тип НГМД 1 (10 - 2S1D, 11 - 1S1D или не подключен)
              x                     Индекс (начало дорожки) (активный 0)
          x                         Защита записи (активный 0)
      x                             Трек 0 (активный 0)
  x                                 READY (активный 0)
  
RK(2) - Регистр управления контроллером
---------------------------------
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---------------------------------
                              x     Предкомпенсация (0 - слабая, 1 - сильная)
                      x             Направление движения головки (0 - наружу, 1 - внутрь)
                  x                 Выбор НГМД (0 - первый, 1 - второй)
              x                     Выбор головки (0 - нижняя, 1 - верхняя)
          x                         Включение предкомпенсации
      x                             Режим (0 - чтение, 1 - запись)
  x                                 Включение мотора НГМД (активный - 1)

C1(3) - Управление RK и режим D14
---------------------------------
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---------------------------------
  0                           x     Значение бита RK
  0               x   x   x         Номер бита RK
  1   x   x   x   x   x   x   x     Установка режима работы DD14 (должно устанавливаться как $92)

RD(6) - Регистр состояния контроллера
---------------------------------
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---------------------------------
  x                                 Готовность (активный - 1)
      x                             Синхросбой (активный - 0)
              x                     Разрешение бита готовности записи (активный - 1)
                      x             Разрешение бита готовности чтения (активный - 1)

C2(7) - Управление RD и режим D15
---------------------------------
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---------------------------------
  0                           x     Значение бита RD
  0               x   x   x         Номер бита RD
  1   x   x   x   x   x   x   x     Установка режима работы DD15 (должно устанавливаться как $BD)

Агат-9

Распределение портов

  • C000-C00F ― регистр данных клавиатуры.
  • C010-C01F ― очистка регистра данных клавиатуры.
  • C020-C02F ― магнитофон?
  • C030-C03F ― звук?
  • C040-C04F ― ?
  • C050-C057 ― чт/зп ― видеорежим Apple, переключение ДК в режим Apple (ПА <= 0).
  • C058-C05B ― переключение палитры.
  • C060-C06F ― клавиатура, пульты.
  • C070-C07F ― ?
  • C080-C08F ― режим пзу, псевдо-пзу, сегмента D000-DFFF.
  • C0F0-C0FF ― запись ― переключение ПМ <= 1, чтение ― ?.
  • C100-C1FF ― запись ― переключение страниц памяти, чтение ― возврат номера подключенного банка.
  • C200-C2FF ― разъём 2.
  • C300-C3FF ― разъём 3.
  • C400-C4FF ― разъём 4.
  • C500-C5FF ― разъём 5.
  • C700-C7FF ― Видеорежим Агат, переключение ДК а режим Агат/Apple (ПА)

ПА и ПМ

  • ПМ ― «Признак Машины»
    • 0 ― ОЗУ в режиме Агат, только сброс.
    • 1 ― ОЗУ в режиме Apple, запись по адресу C0F0-C0FF
  • ПА ― «Признак Apple»
    • 0 ― ДК в режиме Apple, обращение (ч/з) по адресам C050-C057
      или C700-C7FF (при ПМ==1)
    • 1 ― ДК в режиме Агат, сброс или обращение по адресам C700-C7FF при ПМ==0

Внимание! В отдельных изданиях официальной документации названия сигналов перепутаны!

Управление памятью

Назначение банков физической памяти на логические сегменты происходит записью произвольного значения по адресам C100-C1FF. Формат адреса: C1mn, где m ― номер логического сегмента (0-7), n ― номер банка (0-F). Чтение возвращает записанное значение. Запись разрешена только в режиме Агат (ПМ==0).

При этом m = 0-7 обозначают номера сегментов в режиме Агат, а E и F указывают на подключенные банки к сегментам 6 и 7 в режиме Apple.

Порт клавиатуры

Для работы с клавиатурой используются следующие порты ввода-вывода:

  • C000—C00F – код нажатой клавиши (младшие 7 битов). Старший бит, равный 1, означает, что код готов к чтению.
  • C063 – линия Р/Л, старший бит кода нажатой клавиши (бит 7).
  • C010—C01F – обращение по этим адресам сбрасывает буфер для приема следующей клавиши.