        Описание Flash Bios controller. (c) J7n/4D  2000-2001


  1. Состав: порты (тоько запись) #7ffb, #fffb, flash 128k, триггер
отключения ПЗУ, схема модификации адреса окна проецирования страниц.

  2. Схема позволяет управлять банками ПЗУ (flash 128k), ОЗУ - вне
зависимости от портов #7ffd и #dffd, менять адрес окна проецирования
страниц: #c000/#4000, отключать ПЗУ, отключать порт #dffd, биты 6,7
порта #7ffd, включать альтернативные экраны.

  3. Распределение ПЗУ (имеем 8 банков по 16к):
   банк:        0       1       2       3       4       5       6       7
содержимое:     Bios+RD TrDos   128Bas  48Bas   RD      RD      RD      RD
Замечание: RD-RomDisk, 128Basic может быть заменен на RomDisk.

  4. Доступ к портам изменения конфигурации: in a,(#fc) - включить,
in a,(#fe) выключить.

  5. Порт #fffb (можно использовать #fb с установленным 7 битом в регистре A).
Содержит номер банка ОЗУ. По Reset и при включении питания не
инициализируется! Соответствие битов номеров страниц:

порт #dffd:     7 6 5 4 3 2 1 0   плюс 3 мл. бита #7ffd
(Profi 1Mb)               │ │ │
                ┌─────────│─┘ │
                │ ┌───────│───┘
                │ │ ┌─────┘
                │ │ │
порт #7ffd:     7 6 5 4 3 2 1 0
(Pentagon 1Mb)  │ │ │     │ │ │
                │ └─│───┐ │ │ │
                └───│─┐ │ │ │ │
                    │ │ │ │ │ │
порт #fffb:     7 6 5 4 3 2 1 0
(Altern. 1Mb)

  6. Порт конфигурации - #7ffb. По RESET инициализируется: %01000000.
Описание битов:
  биты 7,6 - в совокупности с 4м битом порта #7ffd задают номер банка ROM.
(7й - старший бит, 4й - младший). Однако, для того, чтобы активизировать
TrDos, необходима зависимость бита 6 от сигнала DOS. В связи
с этим, в случаях когда, бит 6 не используется для переключения банков Rom
диска он должен быть установлен в 1, а бит 7 в ноль! (что и делается по Reset).
Из этого следует, что можно использовать короткую адресацию этого порта
с маской в рег А - #40;
  бит 5 - отключает (если не включен порт #dffd) биты 6,7 порта #7ffd
(0 - выкл, 1 - вкл);
  бит 4 - отключает порт #dffd и включает 6,7 биты #7ffd;
Таким образом, используя 4 и 5 биты возможны следующие конфигурации:
%xx00xxxx - ZX Spectrum 128/256 (бит 5 #7ffd не маскируется)
%xx01xxxx - Profi 1024
%xx10xxxx - Pentagon 1024
%xx11xxxx - Profi 1024, т.е. бит 4 является приоритетным.
  биты 3,2 - при равенстве обоих 0, имеем конфигурацию, заданную битами 4,5,
но если хотя бы один (3 или 2 или оба) не равен 0, то образуют вместе с
битами порта #fffb номер страницы верхней памяти (64-255);
  бит 1 - Все сказанное выше про биты 2 и 3 справедливо только если процессор
обащается к окну проецирования страниц, заданному битом 1 (при значении
0 - окно #c000-#ffff, при значении 1 - окно #4000-#7fff).
  бит 0 - при установке в 1 на экране вместо страниц 5 и 7 отображаются
страницы #45 и #47 (абсолютная адресация).
Поясню на примере:
      Необходимо перекинуть 16к из страницы #3A (Profi) в #87 (абс.):
      DI:IN A,(#FC)
      LD BC,#DFFD:LD A,#07:OUT (C),A
      LD B,#7F:LD A,#12:OUT (C),A       ;ПРОФИНСКИЙ БАНК #3A
      LD A,#80+7:OUT (#FB),A            ;МЛАДШИЕ БИТЫ НОМЕРА БАНКА
      LD A,%01111010:OUT (#FB),A        ;ОКНО #4000
;               ^^ СТАРШИЕ БИТЫ НОМЕРА БАНКА
      LD HL,#C000:LD DE,#4000:LD BC,#4000:LDIR
      LD A,%01110000:OUT (#FB),A        ;ДЕАКТИВИЗИРУЕМ АЛЬТЕРНАТИВНУЮ
                                        ;АДРЕСАЦИЮ
      IN A,(#FE)                        ;ЗАПРЕТ ЗАПИСИ В #XXFB
  Пример показывает, что можно сразу использовать как обычную адресацию
страниц (по #7ffd/#dffd), так и альтернативную. При этом отображаться
на экране будет не #87 страница, которая включается в окно #4000-#7fff, а по
прежнему страница #15. Аналогично данному примеру страницы можно переключать
по #7ffd (биты 7,6,5), если включить режим адресации Пентагона (сбросить
бит 4 перед записью в #7ffb).

  7. Еще одной возможностью данной схемы является отключение ПЗУ.
Отключение происходит _только_ по сигналу NMI, т.е. по нажатию
Magic кнопки и включается по RESET или при выполнении любой команды
по адресу, старшему #3fff. Во время отключения ПЗУ подключается
страница с абсолютным номером #40.
 Пример установки нового обработчика NMI:
        DI:IN A,(#FC)
        LD A,#80:OUT (#FB),A
        LD A,%01111000:OUT (#FB),A
        LD HL,NMI_BEG:LD DE,#C066
        LD BC,NMI_LEN:LDIR
        LD A,%01110000:OUT (#FB),A
        IN A,(#FE)
        RET
NMI_BEG
        .PHASE #0066
        LD     (STACK),SP
        PUSH   AF
        etc...

        .UNPHASE
NMI_LEN EQU    $-NMI_BEG
