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




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

Похожие статьи:
Тусовка - Поговорим о музыкальных стилях.
Открытые письма Nemo №4.10
Реклама - всё для ZX Spectrum 48/128.
Rest In Pain - Awaken'а не будет. Пpоект окончательно закpыт, исходники пpоданы Necromancer'у, pазpешите откланяться...
Обзор игр - The Cezar, 8-й Отдел, Clickmania, 4x4 Puzzle, Xixit, Tower Pod.

В этот день...   8 мая