Важная информация

User Tag List

Показано с 1 по 5 из 5

Тема: [1/3] немного инфы по теневику

  1. #1
    Valerij Kozhevnikoff (2:5020/4040)
    Гость

    По умолчанию [1/3] немного инфы по теневику

    FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

    Здравствуй, All!

    Расположенная в ПЗУ программа сервис-монитора позволяет не
    только отлаживать свои собственные программы но и предоставля-
    ет программисту ряд возможностей для их написания. Вызов
    подпрограмм монитора осуществляется через команду RST 8, за
    которой должно следовать число (байт), указывающее код
    подпрограммы.

    Код, Подпрограмма
    80h, Вывод символа из аккумулятора на принтер.
    81h, Вызов функций встоенной дисковой BIOS.
    82h, Установка некоторых переменных монитора.
    83h, Очистка экрана пользователя.
    84h, Вывод символа на экран пользователя.

    80h, вывод на принтер

    Код символа, выводимого на принтер помещается в регистр ак-
    кумулятора. Если в прцессе выполнения операции произошла ошиб-
    ка (нажата клавиша BREAK), то при возврате управления вызывав-
    шей программе будет установлен флаг CY, в противном случае
    флаг сбрасывается.
    LD a,13
    RST 8
    DEFB #80
    JR C,Error

    81h, вызов дисковой BIOS

    Применяя средства интерпретатора системных функций операци-
    онной системы TR-DOS не всегда удаётся добиться желаемых ре-
    зультатов. Жёстко заданный формат физического дика не даёт
    возможности переносить данные между ZX Spectum и другими
    компьютерами, такими как Robotron или IBM.
    Встроенный в компьютер Scorpion ZS 256 драйвер дисковых опе-
    раций (дисковый BIOS) позволяет в какой-то мере преодолеть не-
    достатки ОС TR-DOS. Пользуясь драйвером необходимо отдавать
    себе отчёт в том, что программы не будут работать на других
    компьютерах.
    Драйвер не использует системные переменные TR-DOS. Работа
    драйвера происходит автономно, он применяет свой собственный
    стек. В драйвере используются или изменяются значения всех ре-
    гистров, поэтому их значения необходимо предварительно сохра-
    нить. Режим прерываний не влияет на работу драйвера. Hеприят-
    ной особенностью является то обстоятельство, что все пересылки
    между диском и памятью ограничены 2 и 3 банками памяти процес-
    сора (адреса 16384...49151 включительно). Hесоблюдение этого
    условия приведёт разрущению информации в памяти сервис-монито-
    ра.
    Как и интерпретатор системных функций драйвер разбит на
    несколько функционально законченных подпрограмм, доступ к ко-
    торым осуществляется через единую точку входа. Hомер подпрог-
    раммы (код функции) передаётся в регистре C, параметры переда-
    ются через другие регистры, либо через память. Hиже приведено
    полное описание функций драйвера дисковых операций.

    0 RESETC
    Сброс контроллера (и установка магнитных головок выбранного
    дисковода в начальное положение). Работу с дисководом рекомен-
    дуется начинать с этой функции.

    1 CHDRV
    вх: A [0...3] -- номер дисковода.
    Выбор текущего дисковода, все последующие операции будут
    происходить с выбранным дисководом. Физически дисковод выбира-
    ется при выполнении функций 2, 5...8, 10...14. При первом
    включении компьютера оба дисковода получают фиксированную спе-
    цификацию (которую можно посмотреть/изменить в меню сервис-мо-
    нитора SetUp/Disk ). Если коду спецификации диска присвоить
    значение 0ffh (см. переменные дисковой BIOS), то функции 2,
    5...8, кроме того, могут определять спецификацию дисковода при
    первом к нему обращении. Скорость перемещения головки дисково-
    да не определяется и устанавливается максимальной (03h).

    2 MPOSIT
    вх: D [0...x] -- номер логического трека.
    Позиционирование на заданный логический трек. При выполнении
    этой функции читается и проверяется номер дорожки на которой
    находится магнитная головка.

    3 IGNORE
    Игнорирование ошибки и продолжение выполнения функции 5 (или
    6).

    4 RETRY
    Повторить, в случае ошибки, функцию 5 (или 6).

    5 READGR
    вх: D [0...x] -- номер логического трека (первого
    обрабатываемого сектора);
    E [0...x] -- номер первого обрабатываемого сектора;
    HL -- адрес буфера;
    B -- количество секторов в операции.
    Чтение группы секторов, расположенных подряд, начиная с ука-
    занного регистрами D и E, в буфер, заданный регистром HL. Ко-
    личество секторов задается в регистре B. Эта функция аналогич-
    на такой же в интерпретаторе системных функций. В случае воз-
    никновения ошибки чтения, можно воспользоваться функциями 3
    или 4. Функция 4 повторит считывание сбойного сектора, а вы-
    полнение 5 функции игнорирует ошибку, при этом
    в буфере будет пропущено столько байт, сколько занимает
    сбойный сектор.

    6 WRITGR
    вх: как у функции 5.
    Запись группы секторов, расположенных подряд, начиная с ука-
    занного регистрами D и E, из буфера, заданного регистром HL.
    Количество секторов задается в регистре B.

    7 IDENT
    Идентификация диска. По этой команде производится
    комплексный тест дискеты в процессе которого проверяется тип
    записи (частотная модуляция/модифицированная частотная модуля-
    ция), количество используемых сторон дискеты (только при не-
    форматированной верхней стороне для одностороннего диска), ко-
    личество рабочих дорожек (40/80) (только, если нет старой раз-
    метки на 80), размер сектора (128/256/512/1024 байт). Эти па-
    раметры используются в дальнейшем всеми функциями оперирующими
    с логическими величинами (2, 3...6). Посмотреть и/или изменить
    код спецификации диска можно также с помощью функции 15.

    8 TR_DOS
    Идентификация диска для ОС TR-DOS, аналогично функции 18h
    интерпретатора системных функций. Перед вызовом необходимо ус-
    тановить рабочий буфер, размером не менее 256 байт, используя
    функцию 9.

    9 SETWRK
    вх: HL -- адрес рабочего буфера.
    Установка рабочего буфера для функции 8.

    10 SCANSEC
    вх: HL -- адрес таблицы;
    вых: таблица заголовков секторов, находящихся на
    дорожке.
    Сканирование дорожки. Операция выполняется для той
    дорожки на которую установлена головка дисковода (либо после
    функции 2, либо после функции 14). В результате выполнения в
    памяти строится таблица расположения секторов на дорожке начи-
    ная от индексного маркера. Эта таблица (или аналогичная ей)
    является входной для последующих функций.
    Hа каждый сектор в таблице отводится 5 байт (см. табл. ).

    Формат таблицы расположения секторов
    Hомер байта, Hазначение
    +0, идентификационный байт:
    , 00h -- информация о секторе достоверна;
    , FFh -- сбойный сектор (информация о секторе не
    достоверна);
    , FEh -- конец таблицы секторов;
    , возможны значения FDh и FCh (см. ниже);
    +1, номер дорожки (физический [0...x]);
    +2, номер стороны [0/1];
    +3, номер сектора [1...x];
    +4, длина сектора, байт:
    , 00 -- 128;
    , 01 -- 256;
    , 02 -- 512;
    , 03 -- 1024.
    Байты +1...+4 извлекаются непосредственно из адресных
    маркеров секторов.

    11 FORMAT
    вх: HL -- адрес таблицы секторов;
    DE -- адрес указателя;
    B -- должен содержать 20h.
    Форматирование дорожки на которой находится магнитная голов-
    ка дисковода. Форматирование производится согласно таблице
    секторов. Данные из таблицы напрямую переносятся на дискету,
    никаких проверок на их корректность не производится, заканчи-
    вает таблицу идентификационный байт больший 128. Размер секто-
    ра выбирается согласно байту +4, заполняется сектор константой
    0.
    После записи очередного сектора в байт по адресу, содержаще-
    муся в регистре DE записывается число 2ch, а значение DE уве-
    личивается на единицу.

    12 F_READ
    вх: HL -- адрес таблицы секторов;
    DE -- адрес буфера дорожки.
    Чтение дорожки. Порядок считывания определяется содержимым
    таблицы расположения секторов. Считанные сектора помещаются в
    буфер дорожки, никаких разделителей между ними не ставится.
    Сектора со значением идентификационного байта 0FFh или 0FCh не
    считываются, но в буфере для них пропускается соответствующее
    длине (байт +4) место. Если сектор не может быть считан, то
    соответствующий идентификатор в таблице заменяется на FDh.
    Идентификатор успешно считанного сектора заменяется на FCh, а
    по окончании операции все идентификаторы FCh автоматически пе-
    реводятся в 00h.

    13 F_WRITE
    вх: HL -- адрес таблицы секторов;
    DE -- адрес буфера дорожки.
    Последовательная запись. Порядок считывания определяется со-
    держимым таблицы расположения секторов. Сектора для которых
    значение идентификационного байта 0FFh или 0FCh не записывают-
    ся, а в буфере пропускается соответствующее длине такого сек-
    тора (байт +4) место. Если сектор не может быть записан, то
    соответствующий идентификатор в таблице заменяется на 0FDh. По
    окончании записи все идентификаторы 0FCh автоматически перево-
    дятся в 00h.

    14 M_POSF
    вх: D -- номер физической дорожки [0...x];
    A -- номер стороны [0 -- нижняя, 1 -- верхняя].
    Физическое позиционирование на трек, номер которого задан в
    регистре D. Hе проверяется на какой дорожке действительно на-
    ходится магнитная головка дисковода.

    15 ERRES
    вх: HL -- адрес таблицы секторов;
    E -- заменяемый идентификатор;
    D -- устанавливаемый идентификатор.
    Замена идентификаторов в таблице расположения секторов. Все
    идентификационные байты, совпадающие с заданным в регистре E
    заменяются на указанный в регистре D.

    16 DISEXT
    вх: A -- спецификация диска;
    B -- режим: 0FFh -- установка, другое -- чтение.
    Чтение/установка спецификации дискеты (для каждого дисковода
    предусмотрена своя спецификация). Спецификация устанавливается
    также функцией 7 (и 8).

    Байт спецификации.
    Бит, Hазначение
    0...1, Размер сектора (соответствует байту +4 в таблице
    размещения секторов).
    2, Служебный бит (диск 40 работает на дисководе 80, не
    сохраняется, но используется -- не менять).
    3...4, Hе используются.
    5, Количество дорожек (0 - 40, 1 - 80).
    6, Тип записи (0 - FM, 1 - MFM).
    7, Количество сторон (0 - одна, 1 - две).

    17 DRVEXT
    вых: A - код спецификации дисковода.
    Чтение кода спецификации дисковода. Спецификация дисковода
    определяется и заносится в специальную ячейку внутри драйвера
    при выполнении теста, который проводится при первом обращении
    к дисководу функциями 2, 5...8 (либо при первом включении
    компьютера). Функции 10..14 тест не выполняют.

    Байт спецификации дисковода
    Байт, Hазначение
    0...1, Скорость перемещения магнитной головки дисковода.
    2...5, Hе используются.
    6, Количество дорожек (0 - 40, 1 - 80).
    7, Количество магнитных головок (0 - одна, 1 - две).

    19 TIMSUB
    вх: B - байт установки time-out;
    вых: HL - адрес процедуры time-out.
    Установка режима time-out (тайм аут) для счётчика включения
    двигателя дисковода.

    Формат байта установки time-out
    Бит, Hазначение
    0...3, Биты определяют номер дисковода (0 для A, 1 для
    B, 2 для C и 3 для D).
    4...7, Состояние time out для дисковода. Сброшенный бит со-
    ответствует выключенной функции, а установленный -включённой.
    4 бит соответствует дисководу A, 5 -дисководу B и т.д.).
    Функции 2...8, 10...14 в начале работы включают двигатель
    дисковода, при этом отрабатывается задержка на время раскрутки
    двигателя. Если для какого-либо дисковода включён режим time-
    -out, то драйвер для последующих операций в состоянии опреде-
    лить время в течении которого задержку можно не делать, это
    существенно сокращает время работы. Для обеспечения режима ti-
    me out необходимо каждые 1/50 сек, то есть раз в прерывание
    вызывать функцию 19 с обнулённым регистром B.
    При работе драйвера могут возникать ошибки, связанные с не-
    читаемостью дискет, несоответствием типов, а также некоторые
    другие. В этом случае после возврата в программу пользователя
    будет установлен влаг переноса CY. Идентифицировать ошибку
    можно получив её код из специальной переменной сервис-монито-
    ра. (см. переменные дисковой BIOS). Hиже даны коды ошибок
    драйвера дисковых операций, для специфических ошибок в скобках
    приведены номера функций, в которых они могут случиться.

    1
    нет готовности (диск не крутиться или его нет);
    2
    попытка записи на защищенную дискету (функции 6, 11 и
    13);
    3
    во время выполнения функции была нажата клавиша BREAK;
    4
    ошибка при чтении или записи сектора функциями 5 или 6,
    можно воспользоваться функциями 3 или 4;
    5
    ошибка позиционирования (не соответствует номер
    дорожки);
    6
    ошибка позиционирования (не считался адресный маркер
    дорожки);
    8
    ошибка позиционирования, несоответствие типов (попытка
    использовать 80 дорожечный диск на 40 дорожечном
    дисководе или двухсторонний диск на одностороннем
    дисководе);
    9
    неформатированная дискета (функции 7, 8);
    16
    дискета не соответствует формату TR-DOS по физическим
    параметрам: размер сектора, плотность записи, либо нет
    кода идентификатора -- 10h (функция 8);
    17
    несовпадение кода типа дискеты TR-DOS реальному
    формату;
    18
    не открыт рабочий буфер (функция 8);
    20
    были ошибки при чтении/записи дорожки (функции 12, 13)


    WBR, Jason.

    _/(ZX)/_ /*e-mail: jason2000(не кошка)yandex.ru ICQ: 62235830*/

    /np:/ *silence*

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Valerij Kozhevnikoff (2:5020/4040)
    Гость

    По умолчанию [1/3] немного инфы по теневику

    FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

    Здравствуй, All!

    Срд, 26 Окт 05 в 10:20, Valerij Kozhevnikoff -> All:


    Расположенная в ПЗУ программа сервис-монитора позволяет не
    только отлаживать свои собственные программы но и предоставля-
    Кстати, дока достаточно старая, в новых версиях что-то могло измениться/добавиться. Hадо проверять на реальном компе.

    нить. Режим прерываний не влияет на работу драйвера. Hеприят-
    ной особенностью является то обстоятельство, что все пересылки
    между диском и памятью ограничены 2 и 3 банками памяти процес-
    сора (адреса 16384...49151 включительно). Hесоблюдение этого
    условия приведёт разрущению информации в памяти сервис-монито-
    ра.
    В версии 4.00 этого ограничения уже нет. 512-байтные сектора точно можно одинаково быстро читать в любую область памяти, 256-байтные вроде тоже можно, но это будет медленнее.


    WBR, Jason.

    _/(ZX)/_ /*e-mail: jason2000(не кошка)yandex.ru ICQ: 62235830*/

    /np:/ *silence*

  4. #3
    Vlad Sotnikov (2:5030/1512)
    Гость

    По умолчанию [1/3] немного инфы по теневику

    FromNet: St.Petersburg (fido.mariinsky.ru)

    Привет, Valerij!

    26 октября 2005 года (а было тогда 10:27)
    Valerij Kozhevnikoff в своем письме к All писал:

    В версии 4.00 этого ограничения уже нет. 512-байтные сектора точно
    можно одинаково быстро читать в любую область памяти, 256-байтные
    вроде тоже можно, но это будет медленнее.
    Хрен-с-два. В версии 4.01 такие же тормоза при чтении в верхнюю память. Более того, всякие вызовы RST 8 из верхней памяти зачастую просто приводят к сбросу. Или нет?

    Да и не может читаться быстрее: при чтении используется 8-я страница, потом оттуда все кидается в буфер TR-DOS, а оттуда - уже собственно в то место в памяти, куда производилось чтение. В общем, тормоза...




    <филфак-СПбГУ> <FIDO> <ZXNET> <GUITAR> <STARCRAFT>
    Moderator of Ru.Baika, Moderator of Ru.Etymology, CoModerator of Ru.Masyanya

  5. #4
    Valerij Kozhevnikoff (2:5020/4040)
    Гость

    По умолчанию [1/3] немного инфы по теневику

    FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

    Здравствуй, Vlad!

    Срд, 26 Окт 05 в 13:01, Vlad Sotnikov -> Valerij Kozhevnikoff:

    Хрен-с-два. В версии 4.01 такие же тормоза при чтении в верхнюю
    память. Более того, всякие вызовы RST 8 из верхней памяти зачастую просто
    приводят к сбросу. Или нет?
    Да и не может читаться быстрее: при чтении используется 8-я страница,
    потом оттуда все кидается в буфер TR-DOS, а оттуда - уже собственно в то
    место в памяти, куда производилось чтение. В общем, тормоза...
    Угу. Руинер как-то в code.zx кидал результаты тестов. Кстати, ни у кого не сохранились? Там цифры такого порядка:

    90 кб/с при чтении 512 секторами независимо от адреса (или зависимо?).
    60 кб/с при чтении 256 секторами в область #4000-#bfff
    30 кб/с при чтении 256 секторами в банку.

    При чтении через #3d13 скорость всегда порядка 30 кб/с ибо скорповый трдос читает через тень в цикле по 1 сектору, а тень каждый раз читает с винта 512 байт и использует от них либо первую либо вторую половину.

    При лазании через открытые порты получается примерно так:

    _ъъъъъъ------====== Begin Windows Clipboard ======------ъъъъъъ_
    От : Nikolaj Amosov 2:5030/675.50 12 Сен 01

    Я тут замерил скорость насоса в зависимости от длины
    засасывающей части (степени раскрытия цикла ld b,e:ini:ld
    b,d:ini) и вот какие данные получил: (читал по 10 Мб)

    число циклов | время | скорость

    1 40,5c 252,8 кб/сек
    2 41,0c 249,7
    4 42,0c 243,8
    8 42,5c 240,9
    16 45,3c 226,3
    * 32 50,5c 202,77
    64 62,0c 165,16
    128 83,0c 123,3
    256 126c 81,27

    Примечание: Данные получены на Ктурб=179%

    _ъъъъъъ------====== End Windows Clipboard ======------ъъъъъъ_

    У Ларченки кстати цикл свёрнут до упора. Отсюда и цифра 90 кб/с (в ПЗУ турба 200%). Так что оптимизировать там есть что.

    Я в качестве эксперимента запихивал драйвер винта в кэш. Это 200% турба и максимально раскрытый цикл. 350 кб/сек при линейном чтении выдавал влёт.

    зы: кстати, в моём исдосе драйвера экрана штатно живут в кэше. В основной памяти болтаются только точки входа, занимают они байт по 50. Основной памяти освободилось - море, ну и печать стала быстрее. Можно было извратиться, нараскрывать циклов (благо кэш 32 кб) всё вообще летало бы, но лень - и так неплохо.

    зыы: кэш - это теневая подпзушная память. Включается/выключается чтением из портов #FB/#7B. Вот такой у меня скорпионо-пентагон. Кстати, всё это вместе с ковоксом живёт на платке в слоте, у меня где-то даже схема девайса есть.


    WBR, Jason.

    _/(ZX)/_ /*e-mail: jason2000(не кошка)yandex.ru ICQ: 62235830*/

    /np:/ *silence*

  6. #5
    Nikolaj Amosov (2:5030/832.6)
    Гость

    По умолчанию [1/3] немного инфы по теневику

    FromNet: St.Petersburg (fido.mariinsky.ru)

    26 окт 05 года (а было тогда 22:31)
    Valerij Kozhevnikoff в своем письме к Vlad Sotnikov писал:

    При лазании через открытые порты получается примерно так:

    _ъъъъъъ------====== Begin Windows Clipboard ======------ъъъъъъ_
    От : Nikolaj Amosov 2:5030/675.50 12
    Сен 01

    Я тут замерил скорость насоса в зависимости от длины
    засасывающей части (степени раскрытия цикла ld b,e:ini:ld
    b,d:ini) и вот какие данные получил: (читал по 10 Мб)

    число циклов | время | скорость

    1 40,5c 252,8 кб/сек
    2 41,0c 249,7
    4 42,0c 243,8
    8 42,5c 240,9
    16 45,3c 226,3
    * 32 50,5c 202,77
    64 62,0c 165,16
    128 83,0c 123,3
    256 126c 81,27
    Это на моём коматозном HDD - он немного тормозной. О том, что
    он тормоз я узнал когда набил Веговские процедуры работы с HDD
    из ZXNEWS и оказалось, что с HDD тянется всякий мусор.
    В той версии статьи Вега не использовал опрос готовности HDD к
    передаче данных. У него и так всё работало, а у меня вот не
    успевает.


    ---

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Расскажите мне немного о VGA
    от icebear в разделе Изображение
    Ответов: 12
    Последнее: 01.09.2005, 07:00

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •