<< Вернуться к содержанию





1) О Пълдиновских функциях INT_$33 и INT_$34.
В руководстве по UniBIOS эти функции обозначены как резервированные,
но несмотря на это сказано, что они используются Бейсиком. Но, как
известно, UniBASIC (ни дисковая, ни ROM-версия) - их не использует.
Скорее всего, эти функции могли использоваться в "6800 Бейсик
интерпретатор ВГВ производства". Как известно, версии этого Бейсик'а
не получили распространения, так как в том Бейсик'е были серьёзные
проблемы с арифметикой, и НИПЛ создала более лучший UniBASIC.

2) У Пълдиновской сети Ulan есть очень странное свойство. Очень
часто (но не всегда) бывает, что если один или два компьютера
находятся в состоянии ожидания "Производится загрузка UniDOS по сети...",
то другие могут при перезагрузке выдавать "Нет связи с сетью".

3) В сети Ulan чем меньше номер станции, тем выше приоритет. К станции
с меньшим номером файлы передаются в первую очередь.

4) У прерывания INT_$17 на Пълдине есть недокументированные функции:
A = 3   - позиционирование головки дисковода.
A = $ff - выключает мотор дисковода.
A = $80 - то же, что и A = 0, но с небольшими отличиями, см. отрывок
из исходного кода прерывания INT_$17 в BIOS:

INIT            clr     mcounter        ; вход при A = $80
                ldaa    #$FF
                staa    olddrive
                bra     RESET           ; переход на вход при A = 0

5) Адреса в области $e6f1-$e6ff, хоть и являются "необычными", они всё
же не полные аналоги переключателя страниц $e6f0. Поведение этих адресов
из области ввода-вывода очень странное. Если, работая в мониторе, в
$e6f1 занести значение, 4 младших бита которого не равны текущей
странице, то компьютер зависнет. После перезагрузки в $e6f1 останется
введённое значение, но, несмотря на это компьютер будет работать
нормально. Но если в $e6f1 поверх его занести такое же - то компьютер
снова зависнет. Другие проверки показали, что $e6f1 (и другие адреса в
области $e6f1-$e6ff) в некотором случае работают как и $e6f0 (то есть
как переключатель страниц), а иногда и просто не работают (если
не повесят компьютер, то и страницу не переключат) - короче, всё с
адресами $e6f1-$e6ff непредсказуемо.

6) О том, что значит каждый бит в адресе $e62a из области ввода-вывода.
Начальное значение этого байта - $37.
Итак, менялся 1 бит с помощью набора ассемблеровских команд:
        ldaa    $e62a
        eora    #маска_бита
        staa    $e62a
        rts
Итак, рассмотрим каждую "маску_бита", что будет если
ИЗМЕНИТЬ соответствующий бит:

$80 - результата нет - в памяти не сохраняется (всегда монитор возвращает 0),
      но на самом же деле - этот бит не пустое место, это - "строб клавиатуры"
      - он устанавливается в 1 автоматически при нажатии клавиш (см. исходные
      тексты эмулятора).

$40 - результата нет; в памяти не остаётся (всегда равен 0).

$20 - по умолчанию этот бит равен 1, но если его установить в 0, то
      включается светодиод ALLCAPS. Если потом нажимать клавишу CAPSLOCK
      (при этом BIOS будет менять бит с весом $08 в $e62a), то на светодиод
      это влиять не будет - он будет гореть непрерывно.

$10 - включается режим, при котором при нажатии на клавиши светодиод
      ненадолго включается и плавно, но быстро гаснет. Если в этом режиме
      включить светодиод, установив в 1 бит с весом $08 в $e62a, то здесь всё
      будет как обычно - светодиод будут гореть непрерывно.

$08 - если равен 1 - то светится светодиод ALLCAPS (это хорошо описано
      в документации).

$04 - если изменить этот бит, то компьютер зависнет.

$02 и $01 - информация о изменении этих битов в ячейке $e62a сохраняется,
            но результата - никакого.

Уточнение. Если в $e62a и бит $10, и бит $20 одновременно сделать равными
           нулю, то светодиод будет гореть непрерывно.

7) Рассмотрим теперь также каждый бит в адресе $e62b.
Начальное значение этого байта - $37.

$01 - компьютер зависает.

$02 - информация о изменении этого бита сохраняется в памяти, но
      результата - никакого.

$04 - компьютер зависает, при этом вся память компьютера оказывается
      захламлённой мусором:
        0100    d9 00 ff 00 00 f2 8b f1
        0108    84 09 c9 00 ff 00 00 f4
        0110    bf f1 c9 09 d9 00 ff 00
        0118    00 f2 8b f1 84 09 c9 00
        0120    ff 00 00 f4 bf f1 c9 09
        и так далее - такими повторяющимися участками заполняется
        ВСЯ память компьютера.

$08 - вызывает щелчок динамика (это хорошо описано в документации).

$10 - включает режим, когда звук отключен, но при нажатии единственной
      клавиши LAT/КИР слышен слабый щелчок. Интересно отметить, что к
      щелчку приводит то, что при нажатии клавиши LAT/КИР BIOS производит
      запись в $e629. Если просто записывать что-то в $e629 любым другим
      способом - то тоже будет щелчок (но, что очень странно, - в этом случае
      щелчок будет чуть-чуть громче, чем при нажатии клавиши LAT/КИР).
      Но самое странное и интересное, что этот щелчок при нажатии LAT/КИР
      тише, чем "элементарный" щелчок (при изменении бита с весом $08 в байте
      $e62b). Хотя по логике, "элементарный" щелчок должен быть самым тихим.

$20 - ПОЛНОЕ отключение звука.

$40 и $80 - результата нет, даже в памяти не сохраняются (всегда оба
            эти бита равны 0).

Уточнение. Если в $e62b бит $20 сделать равным 0, то значение бита $10
           значения не имеет - здесь всегда полная тишина. А вот если
           бит $10 сделать равным 0, то значение бита $20 будет определять
           только включено/выключено щёлкание динамика при нажатии на
           клавишу LAT/КИР.

8) Теперь о $e629. Рассмотрено поведение битов $80 и $40, отвечающих за
кассетофон (на модели 601У, в которой НЕТ поддержки кассетофона). Если
изменять бит с весом $40, то изменение сохраняется в памяти. А вот изменение
бита $80 не сохраняется в памяти (он всегда равен 0). Так как в 601У нет
поддержки кассетофонного интерфейса - то при изменении этих битов -
результата нет.

9) Как известно, значения Пълдиновских видеорегистров нельзя считать.
Например, если в $e600 занести номер регистра и сразу же считывать
$e601 - то всегда будет получаться нуль - для всех регистров (кроме,
правда, регистра $0f - при его чтении в $e601 будут получаться
разные значения типа $34, $36, $37, ...).

10) Об адресах области ввода-вывода, касающихся контроллера дисковода.
В области $e6d0-$e6df чётные адреса ($e6d0, $e6d2, $e6d4, $e6d6, $e6d8,
$e6da, $e6dc, $e6de) - дублируются. Нечётные тоже дублируются, в другие
нечётные адреса этого промежутка.

11) О Пълдиновской функции INT_$41 (функции получения номера версии
операционной системы UniDOS). Так вот, (в руководстве по UniBIOS об
этом не сказано), - функция INT_$41 возвращает номер версии ядра UniDOS
(UniDOS kernel), который зашит в ROM-микросхеме, а не номер версии
дискетной части UniDOS (командного интерпретатора unidos.cmd)! Прерывание
INT_$41 устанавливается при инициализации ROM с ядром UniDOS при
загрузке Пълдина. И INT_$41 всегда возвращает именно версию этого
ядра UniDOS, даже если не загружен командный интерпретатор unidos.cmd.
А команда VER, данная с командной строки UniDOS, - вот она уже выдаёт на
экран номер версии именно командного интерпретатора unidos.cmd.