ZXNet эхоконференция «code.zx»


тема: SMUC-info.



от: 812/19.00
кому: All
дата: 13 Oct 1997

Hi, All

Итак: по просьбе Бориса, кидаю в эту эху
информацию по работе SMUC by Scorpion.

То, что я здесь напишу - "наглая" перепе-
чатка из брошюрки "SMUC, Инструкция по
подключению и работе v1.2", с моими ком-
ментариями. (Как выяснилось, у многих
этой книжки нет.)

Итак:

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Подпрограммы, вызываемые через RST 8, в
C помещается номер п/п:

C=34 ($hddid) - идентификация жесткого
диска.

in: 512-байтный буфер, указатель на кото-
рый задается в workfl (подфункция 9)

out: CY=error (нет HDD).

VS: видимо, эта программа задумывалась в
основном для определения наличия винта,
но замечены глюки: флаг переноса может
вернуться каким угодно, и, кроме того,
в некоторых случаях после этой п/п отка-
зывается работать п/п $hddmount (см.ниже)


C=35 ($hddmount) - подключение раздела к
драйверу HD.

in: Akk - тип операции, битами, в скобках
[] указаны приоритеты (0 - наивысший).

7 [2] - автоподключение (задается в секто-
ре автонастроек. (биты 0,1 - N. диска.)

6 [0] - отключить подраздел от драйвера,
биты 0,1 - номер драйвера ( аналогично
финкции DisMount в теневике ).

5 [1] - подключить подраздел к драйверу.
В DE указать адрес дескриптора (25 байт),
возвращаемого при предыдущих подключениях
(см. бит 4).

4 [4] - вернуть в память ( по HL, 25 байт)
дескриптор текущего подключенного разде-
ла.

3 [3] - подключение по имени, адрес имени
в памяти в DE : [dr][]partdos, где
part - имя раздела, dos - имя диска.
Если не задано dr, то подключается к за-
даваемому битами 0,1 диску.

VS: имя может выглядеть так: GamesDisk01.
отступления от заданного стандарта ( напри-
мер вместо "" - "/" ничего вам не позво-
лит подключить.

2 - должен быть 0.

0,1 - номер дисквода, соответственно:
0-A, 1-B, 2-C, 3-D.

out: CY=error (в том числе раздел не
найден.

VS: imho, основная п/п для работы с вин-
том. Hо!!! Диск, подключаемый вами к
этому драйверу, нестабилен: при исполь-
зовании подпрограммы TrDos C=1, #3D13
(смена драйвера) на свое место возвраща-
ется старый диск (подключенный вами из
теневика). Эта фича делает невозможным
запуск 95% программ с подключенного ^^^
таким образом диска, т.к. даже обращение
из BASIC'а по 15619 возвращает на место
старый диск. За это MOA надо надавать по
голове и удовлетворяться только чтением/
записью секторов с подключенных самосто-
ятельно дисков. ;(

C=36 ($hddrd) - чтение секторов из подраз-
дела HDD.

in: HL - адрес в памяти, куда считывать,
DE - начальный номер сектора (считая
с 1!) B - число секторов (размер секто-
ра - 512 байт!!! ).

out: CY=error

C=37 ($hddwr) - запись секторов в подраз-
дел HDD.

in: HL - адерес в памяти, откуда считывать,
остальное аналогично $hddwr.

out: CY=error

VS: 36 и 37 не тестил, imho, неудобно
(512 байт!!!), и не нужно.

C=38 ($hddpart) - вернуть таблицу (ката-
лог) подраздела.

in : Akk должен быть 0
HL - адрес буфера для таблицы (1024
байта).

out : CY=error.

Каждый подраздел в таблице описан 16-ю
байтами, где:
+0 - тип подраздела:

0 - нет
1 - Tr-Dos
2 - McDos
3 - IsDos
4 - Bad

+6 - об'ем подраздела в секторах

VS: чтобы подсчитать количество дисков
в подразделе, надо об'ем подраздела
разделить на 1281.

+10 - имя подраздела (6 байт).

!!! Если функцией $hddmount задать раз-
дел, не задавая имени диска (например
Games) , то можно получить информацию
по каждому диску подраздела ( в вышео-
писанном формате).

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

89h (R8time) - чтение/запись времени из
CMOS ( RST 8 : DB #89 ).

В регистре D битами задается:

7 - (1) записать значение времени/даты
(0) считать значение времени/даты.

6 - (1) считывание в буфер (только, если
бит 7=0. (см. бит 5).

5 - (1) прямое считывание (6 байт данных
из CMOS).
(0) считывание в формате ASCII.

0 - (1) работа с датой
(0) работа со временем.

Кроме того, в HL - адрес буфера (если счи-
тывание происходит в буфер), в 5 и 2
банках CPU. Регистр E содержит формат
считывания: младшие 5 бит - символ раз-
делителя (+32!!!) (VS: например для сим-
вола ":" должно быть 26), биты 7,6 и 5
разрешают соответственно вывод часов,
минут и секунд, либо для вывода даты:
бит 7 - выводить день недели
бит 6 - ставить "0" перед числом
бит 5 - выводить месяц словом и перед
годом добавлять "19".

Функция возвращает данные либо в буфер,
(в виде строки ASCII или 6-ю байтами:
секунды, минуты, часы, число, месяц,
год), либо в регистрах:
C - секунды/число
B - минуты/месяц
E - часы/год
L - день недели

В этох же регистрах задаются значения
для изменения времени/даты.

out: CY=error (микросхемы CMOS нет).

VS: У MOA лаконично замечено, что данные
можно вернуть в буфер ( в формате ASC.)
Hо если вы это сделаете, то заметите,
что вам все время возвращаются одни и
те же значения! Hа самом деле, время в
ASCII запоминается где-то в 8-й банке,
откуда вам и возвращается. И обновля-
ется только при инициализации Reset или
Magic!!! Я научился эту фичу обходить
таким образом: сначала время вызывается
в регистрах ( в этот момент данные в
буфере тоже обновляются), после чего
возвращаю себе время в буфер. И на этот
раз это истинное время. (Именно таким
образом я опрашиваю время в BBS 3.20).
Таким образом, вызов времени происхо-
дит через 2 прохода: сначала в регистры
( через RST 8 ), затем сразу в буфер
( снова через RST 8 ). За это MOA надо
тоже надовать по голове ;)


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


Hадеюсь, кому-нибудь то, что я здесь по-
написал, пригодится. Всем пока!


Farvel, Vega from Style Group...

-+- ZxAsm v3.0 - rulezzz!

от: 812/01.14
кому: Vlad Sotnikov
дата: 20 Oct 1997

Огромный Вам дружеский привет, Vlad!!!

Однажды, грохоча клавишами, числа где-то
18-10-97 ровно в 20:35 Vlad Sotnikov пи-
сал(а) to Yuri Burawtsow:

YB>> Area : CODE.ZX
YB>> from : All

VS> Блин, ну прикольные ведь глюки IsDos
VS> делает !!! ;)

Hа самом деле глюков со стороны ис-доса не
было, просто это мой макрос кроме замены
полей фром<>ту не пишет во фроме май
нэйм... :)))))

[ скипатижи ]

VS> Кста, вот ты хитрый: обошел глюк с
VS> часами, а вот интересно: смжешь ты
VS> обойти глюк с фиксацией подраздела/
VS> диска к драйву? Или, может, никакого
VS> глюка там и нет? ;)

Попробуй просто перенастроиться на уст-
ройство и/или дискету. Я сталкивался с та-
ким глюком, но этот глюк и в тени есть.
Суть такова: тебе, я думаю, попадалась на
глаза такая прога, называется она
REST_SCR.B... Hаписанная некогда мною вин-
та неимущим, она не перенастраивалась на
диск. В итоге, когда я запустил ее на вин-
те, а в тени выбрал другой псевдодиск, то
работа продолжалась на том диске, с кото-
рого прога была запущена! Причем если отк-
лючить псевдо и работать с физическим
драйвом, то - и это правильно - работается
с физической дискетой, но стоит подрубить
В ТЕHИ новый псевдо, и опять я вижу скрины
с диска, откуда прога загружалась!..

Да что там - моя REST_SCR! - PRO-TRACKER
и тот не перенастраивается на диск!!!! :(
В то же время программы-bootы Трубинова,
потом Commander наш любимый "голубенький"
- нормально работают после переустановки
логических дисков. А ведь они каждый раз
при обращении к диску выполняют функцию 1,
а если точнее, то:

LD C,1 ;настройка на дисковод
LD A,x ;вместо х - номер
; устройства (0..3)
CALL #3D13

Вот и вся петрушка. И хитрым тут не надо
быть...

(кстати, только что проверено: используй
именно эту функцию, и все будет...
...окоб (c) *MAS*)

VS> Farvel, Vega/Style Group...

С уважением, Юрий.

-+- iS-DOS v4.5 с макросом




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Новости - новости от группы Fatality.
Литстраничка - Головная боль полковника Хауэлла или "Объявляю заседание открытым".
AY-3-8910 - Перепечатка информации по известному вам сопроцессору.
Посвящение в альбом - Миры великой тоски.
CDOS-модем - В одном из предыдущих номеров нашей газеты мы опубликовали статью о настройке модема, так чтобы работала EMS.

В этот день...   19 апреля