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 с макросом
|