Абзац
:: Поиск
:: Поддержка проекта
Webmoney:
  • Z610389805629
  • R427996570517
  • E023541002978
  • :: №23 (24.02.2005) Просмотров: 9371

    Автор: Евгений Илясов.

    Рубрика: Читатель читателю.

    Номер: №23 (24.02.2005).



    «Рабовладение» в iS-DOS на Sinclair

    Как известно, спецификация IDE (Integrated Drive Electronics) для интерфейса ATA (AT Attachment) предусматривает подключение и последующую совместную работу двух устройств с интегрированным IDE-контроллером. А рaсширенная спецификация E-IDE (Enhanced IDE) допускает совместное функционирование до четырех IDE-устройств. Но четыре IDE-устройства для Sinclair-совместимой машины, - как правило, ненужная жлобская роскошь. А вот для двух устройств, -винчестера и CD-привода или двух винчестеров, - вполне могут найтись целесообразные и оправданные применения.

    Реальный, проработанный и программно поддержанный вариант использования двух винчестеров IDE в одной упряжке предоставляет для пользователей Операционная Система iS-DOS. Причем достигается это использование через абсолютно стандартный контроллер IDE-Drive разработки (c)Nemo, без каких-либо переделок или доработок. По большому счету, контроллер лишь предоставляет возможность обмена данными с IDE-устройством. А на одном шлейфе могут быть одновременно подключены и работать два IDE-устройства. И если оба эти устройства - винчестеры, то все аппаратные изменения сводятся к правильной установке перемычек-»джамперов» (Jumper), которые задают логику работы накопителей. Один винчестер должен быть выставлен перемычками на нем как «Master», а другой, естественно, как «Slave» («раб»). Как правило, положение перемычек должно быть указано для каждого режима на наклейке, на корпусе винчестера. Хотя это и необязательно в старых моделях. Встречались, например, винчестеры Seagate, у которых вообще ничего не указано на наклейке. В таких случаях приходится подбирать положение перемычек экспериментальным путем. Хорошо, если там всего лишь одна перемычка, а если две или три - тогда их надо комбинировать. Но особых проблем быть, по идее, не должно. Единственная проблема, которая может встретиться -это если неверно выставить один из винчестеров перемычками, - тогда он будет конфликтовать со вторым и в итоге откажутся работать оба.

    Таким образом, вопрос только в программной поддержке. Второй винчестер выбирается именно программно. Среди регистров винчестера, доступных для программирования через IDE-контроллер, есть так называемый SDH-регистр. Изменяя маску, накладываемую на содержимое этого регистра, можно менять IDE-устройство, к которому будет происходить обращение через IDE-контроллер. Используя нужную маску SDH-регистра, можно переделать iS-DOS’ный драйвер винчестера таким образом, что этот драйвер станет работать со «slave»-накопителем. Так что, при необходимости, можно установить два винчестера и работать с ними, - с каждым через свой драйвер. Это может найти применение, скажем, для быстрого копирования с одного винчестера на другой. Или на постоянной основе - для использования второго накопителя в качестве архивного, для хранения нужной, но редко используемой информации. Необходимо уточнить, что в системе для нормальной работы нужно установить или один винчестер «Master» или два винчестера - «Master» и «Slave». Один винчестер «Slave» работать не станет. Возможно, это такая схемотехничесткая реализация контроллера (c) Nemo, или изначальная особенность спецификации/интерфейса IDE/ATA. Но в любом случае, вряд ли это можно считать серьезной помехой для использования винчестера «Slave» под iS-DOS на Sinclair.

    В качестве примера использования маски SDH-регистра для обращения к «Slave»-винчестеру здесь приводится комментированный ассемблерный текст сервисной утилиты, созданной на основе усовершенствованной версии «stanby.com» (см., например, заметку «Тормоз для винчестера» в 16 номере «Абзаца»). Формат исходника - iS-DOS Assembler.

    ;SB_EXIT.COM
    ;Программа для торможения одного или двух винтов, выхода в Basic-48, TR-DOS, Монитор «JV KRAMIS» или в главное меню (аналогично нажатию кнопки ).
    ;Версия 1.73 от 15-го ноября 2004 года.
    ;
        ORG 24000    ;стартовый адрес
    LD0    EQU #D0    ;метки портов 
            ;винчестера
    LF0    EQU #F0
    LP1    EQU #1FFD    ;метки портов 
            ;страниц RAM
    LP7    EQU #7FFD
    LPD    EQU #DFFD
        JR BEGIN
        DEFM «UnCo»    ;вектор «униколора»:
        DEFB 2    ;начальные цвета
    UC1    DEFB 114    ;меню выхода в TRDOS
    UC2    DEFB 1    ;при ассемблировании
    
    BEGIN    LD A,(UC1)    ;цвет меню
        LD (WIND+4),A
        LD C,#8A
        LD A,(UC2)    ;цвет тени меню
        LD (WIND+5),A
        LD C,#8A
        RST 16
        EXX
        DI    ;запрещаем прерывания
    
    FKEYS    LD C,#43    ;ищем ключи
        RST 16
        RET C
        RES 5,A    ;приводим к одному 
            ;регистру
        JP NZ,STDBY    ;если нет - тормозим 
            ;и на выход
        CP «S»    ;ключ «S»?
        JP Z,STDBY    ;стоп-кран
        JP KEYS2    ;смотрим, какие есть 
            ;еще
    
    KEYS1    LD C,#43    ;ищем ключи
        RST 16
        RET C
        RES 5,A    ;приводим к одному 
            ;регистру
    
    KEYS2    CP «R»    ;ключ «R»?
        JP Z,EX_GMN    ;сброс (RESET)
        CP «T»    ;ключ «T»?
        JP Z,EX_TRD    ;выход в TR-DOS
        CP «B»    ;ключ «B»?
        JP Z,EX_BAS    ;выход в BASIC-48
        CP «M»    ;ключ «M»?
        JP Z,EX_MON    ;выход в Монитор 
            ;«JV KRAMIS»
    EX_IS    XOR A    ;обнуляем аккумулятор
        LD A,#F4    ;грузим код выхода
        EI    ;разрешаем прерывания
        RET    ;и выходим обратно 
            ;в iSDOS
    STDBY    IN A,(LF0)    ;тормозим «винты»,
        RLCA    ;если они есть;
        JP C,STDBY
        LD A,#A0    ;stop «master»
        OUT (LD0),A
        LD A,#E0
        OUT (LF0),A
        LD A,#B0    ;stop «slave»
        OUT (LD0),A
        LD A,#E0
        OUT (LF0),A
        JP KEYS1    ;снова ищем ключи
    
    EX_GMN    LD BC,LP1    ;порт #1FFD Scorpion:
        LD A,0    ;ROM 0 на место RAM 0!
        OUT (C),A
        LD BC,LPD    ;порт #DFFD Profi:
        LD A,0    ;ROM 0 на место RAM 0!
        OUT (C),A
        LD BC,LP7    ;порт #7FFD:
        LD A,0    ;ROM 0 - на место!
        OUT (C),A
        LD HL,0    ;и полный RESET.
        PUSH HL
        JP #0
    
    EX_TRD    LD IX,WIND    ;вектор «окна»
        LD A,2
        LD C,$wt    ;координаты окна
        RST 16
        LD C,$adrwt    ;координаты текста 
            ;в окне
        RST 16
        EI    ;разрешаем прерывания
        LD C,$key    ;опрос клавиш:
        RST 16
        CP #10    ;если 
        JR Z,EX_IS    ;обратно в iSDOS;
        CP #20    ;или  -
        JR Z,EX_IS    ;обратно в iSDOS;
    ;    JR NZ,RUN    ;любая другая - 
            ;в TR-DOS.
    RUN    LD BC,LP1    ;порт #1FFD Scorpion:
        LD A,0    ;ROM 0 на место RAM 0!
        OUT (C),A
        LD BC,LPD    ;порт #DFFD Profi:
        LD A,0    ;ROM 0 на место RAM 0!
        OUT (C),A
        LD HL,0    ;и вылет в TR-DOS.
        PUSH HL
        JP #3D2F
    
    EX_BAS    LD BC,LP1    ;порт #1FFD Scorpion:
        LD A,0    ;ROM 0 на место RAM 0!
        OUT (C),A
        LD BC,LPD    ;порт #DFFD Profi:
        LD A,0    ;ROM 0 на место RAM 0!
        OUT (C),A
        LD HL,0    ;и вылет в BASIC-48.
        PUSH HL
        JP #0
    
    EX_MON    LD BC,LP1    ;порт #1FFD Scorpion:
        LD A,10    ;ROM 0 на место RAM 0!
        OUT (C),A
        LD BC,LP7    ;установка ПЗУ ZX-128
        LD A,0
        OUT (C),A
        LD HL,0    ;и выход в Монитор 
            ;«JV KRAMIS»
        PUSH HL
        JP #0
    
    WIND    DEFB 2,11,5,28
        defb 114,1,4,35 ;параметры окна
        DEFM « or  - Quit»
        DEFB 13,13
        DEFM «»
        DEFM « - Exit to TR-DOS!»
        DEFB 3
    
    ;И на этом все! Всем спасибо.
    ;Alan Karin Riverman, 15.11.2004, 
    ;понедельник.

    Краткое описание sb_exit.com, версия 1.73 от 15.11.2004.

    Данная программка тормозит до лучших времен один или два винчестера, если, конечно, они у вас есть (сначала тормозится «master», а за ним «slave»), а также обеспечивает выход, в зависимости от использованных ключей, в главное меню компьютера (аналогично нажатию кнопки RESET), или в TR-DOS, или в BASIC-48, или в монитор «JV KRAMIS» (если, конечно, у вас компьютер KAY или модернизированный SCORPION ZS-256 с двумя ПЗУ) из системы iS-DOS - как Classic, так и Chic.

    Программа работоспособна в Chic’е на компьютерах KAY, SCORPION и PROFI, а в Classic’е и на всех остальных.

    Срабатывают тормоза и выезд на обочину любым известным в iS-DOS способом: по «горячей» клавише, из меню и т.д.

    Функции ключей.

    Ключ /s - тормоз винчестера перед выполнением основной функции.

    Ключ /r - выход в главное меню (полный сброс - RESET); одновременно с ключом /s - с тормозом винчестера.

    Ключ /t - выход в TR-DOS с запуском программы «boot» на диске «A»; одновременно с ключом /s - с тормозом винчестера.

    Ключ /b - выход в BASIC-48; одновременно с ключом /s - с тормозом винчестера.

    Ключ /m - выход в монитор «JV KRAMIS»; одновременно с ключом /s - с тормозом винчестера.

    Сначала отрабатывается ключ /s (если он используется, то он должен стоять первым), а затем выполняется выход в указанном направлении. После отработки ключа /s следует команда установки на свое место нулевой банки ПЗУ, а затем отрабатывается команда, заданная вторым ключом:

    - при выходе в главное меню происходит полный сброс компьютера, аналогичный нажатию кнопки .

    - при выходе в TR-DOS выполняется команда «RANDOMIZE USR 15619: RUN «boot», аналогичная такой же в «EXIT_TRD.COM». Для того, чтобы успеть сменить диск, если дисковод - системное устройство, выводится меню и программа ожидает нажатия клавиши: или

    - выход обратно в iS-DOS, любая другая клавиша - выход в TR-DOS.

    - при выходе в BASIC-48 осуществляется переход на адрес #0 ROM BANK 1, установленный по умолчанию в iS-DOS.

    - при выходе в монитор «JV KRAMIS» осуществляется переход на адрес #0 ROM BANK 0, в котором зашит «теневик».

    Ключи можно задавать в виде /s/b или в виде /s /b, программе это безразлично. Регистр букв также не имеет значения.

    Пример: Q:BOOT\sb_exit /s/b (выход в BASIC-48 с тормозом винта).

    Если ключей нет ни одного, работа программы почти ничем не отличается от работы программы standby.com и во многих случаях может ее заменить.

    Для устойчивого «торможения» винчестера и исключения его перезапуска при выходе из программы обратно в iS-DOS (когда, например, курсор находится в подкаталоге пятого-шестого уровня вложенности) лучше организовать вызов программы sb_exit с ключом /s через короткий bat-файл:

    *L-
    Q:SHELL\cache /29
    CAT S:
    Q:SHELL\pan /7
    CAT S:
    Q:SHELL\pan /7
    Q:UTIL\sb_exit /s

    * * *

    При написании статьи использовались материалы: А. Леонтьева (г. Санкт-Петербург), С. Багана (г. Минск), А. Карныгина (г. Балашов), А. Кубрака и Е. Борисова (г. Старица).

    © 2004-2013 Perspective group