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


тема: что енто за рестарт?



от: Valerij Kozhevnikov
кому: All
дата: 06 Jul 1998

Hello All!

Кто знает, что за рестарт такой в скорпе:

LD C,#28
RST 8
DEFB #81

Hайден в пзу трдос.
А то у мя книжка старая, там только до #26 есть.
Я его юзал, вроде упрощенная копия #23, т.е. умеет исполнять
только "автоподключение". Чисто визуально - работает быстрее,
т.е за один прыжок бошек. Быстрая точка входа?

И для С=#27 аналогично, plz. Если есть таковой. :-/
И что такое Tr-dos mirror on/off в меню винтовых утилит?

Копал я тут свой трдос, и обнаружил там кое-что. Когда-то я
думалъ, что перехват обращений к дисководу делается аппаратно,
то бишь в каком-то месте подменяется ПЗУ, аналогично #3Dxx.
Все оказалось проще.

Hо дело не в этом. Кто нить знает как обнаружить наличие/от-
сутствие винта HЕ используя #24 функцию #81 рестарта "иденти-
фикация HDD".
В этом рестарте есть многомаздайный глюкъ: при его (рестарта)
исполнении, с винта на указанный адрес читается паспорт, HО
теневик зачем-то берет из этого паспорта данные о геометрии
(кол-во цилиндров/головок/секторов) и прописывает в свои пере-
менные (слава Богу что не в нврам).
У мя у одного знакомого в паспорте геометрия 560/6/26, а на
самом деле 1024/5/17. И после ентого рестарта ему надо топтать
"стрелка влево + ресет", т.к. начинаются диск еррор, или лезть
в меню сетуп ХДД, чтобы геометрию исправить.
И говорят, таких неправильных винтов на удивление много, осо-
бенно среди старых моделей.
У другого вообще одна голова грохнута, и у него поэтому из-
рядный кусок винта пропадает. Реакция на рестарт аналогичная.
ЧТО ДЕЛАТЬ???
Кодю тут драйверок для одного муз. редактора, и пишу поти-
хоньку описалово всего ентого хозяйства, дабы потом все кучей
отправить Дисмастеру для вставки в Мелон.
А тут глюкъъъъ... Рестарт юзать стремно.

Перелопатил весь трдос, нашел кучу обращений к винту.
Принцип такой: на адрес #5CBF кладется RST 8 : DB #8x : RET,
и неявно выполняется CALL #5CBF.
Процедурка которая енто делает лежит по адресу #0826.
См. ниже, там оно.
Я ставил ловушку на #5CBF, и перечитывал диск, срабатывала
сначала с C=#28 (см. в начале письма), потом с C=#01 (выбор
дисковода).
И по области #800 - #1000 там и сям раскиданы процедурки
чтой-то хитро читающие из порта #7FBA, и в зависимости от про-
читанного что-то такое хитрое они делаютъ. :))
Я читал всяко, всегда из #7FBA приходит #7F. Хотя, судя по
коду, бывает иначе.

Догадки есть, но может кто знает, или тоже догадывается?
Может полностью дизассемблер куска ПЗУ сюда кинуть?

Вот тут немного:

;замечено использование рестартов:
;#81 (дисковая БИОС), функции #01,#02,#05,#06,#28.
;#82 (работа с переменными биоса), смещения #0D,#1D.

ORG #0826

BIOS EX (SP),HL ;процедура вызова RST 8.
PUSH AF
LD A,#CF
LD (L5CBF),A
LD A,(HL)
INC HL
LD (L5CC0),A
LD A,#C9
LD (L5CC1),A
POP AF
EX (SP),HL
PUSH HL
LD HL,L3D2F
EX (SP),HL
PUSH HL
LD HL,L5CBF
EX (SP),HL
RET

LD DE,L4000
LD A,#7
JP #0B

L84C RST #20
LD D,H
RRA
RET C
RST #20
LD A,E
DEC DE
LD A,(L5CF6)
LD BC,L7FBA
IN C,(C)
CP #1
JR Z,L867
JR NC,L86B
BIT 7,C
JR NZ,L8A3
JR L86F
L867 BIT 6,C
JR NZ,L8A3
L86B CP #4
JR NC,L8A3
L86F LD DE,(L5CF4)
LD HL,(L5D00)
LD BC,L105 ;чтение
LD A,(L5CFE)
CP #A0
JR NZ,L881
INC C ;или запись сектора
L881 CALL BIOS
DEFB #81
JR C,L88B
POP HL
POP DE
EI
RET

[хомяк погрыз]

RST #38
RST #38
LD (L5CF6),A
LD BC,L7FBA
IN C,(C)
CP #1
JR Z,L914
JR NC,L917
BIT 7,C
RET NZ
JR L91A
L914 BIT 6,C
RET NZ
L917 CP #4
RET NC
L91A OR #80
LD C,#28 ;не знаю такого.
CALL BIOS ;явно какое-то подключение.
DEFB #81
LD A,(L5CF6)
JR NC,L92D
CP #2
RET C
L92A JP L3EE7

L92D LD HL,L5D16
LD C,A
LD A,#3C
OR C
LD (HL),A
LD A,(L5CF6)
LD C,#1 ;выбор дисковода
CALL BIOS
DEFB #81
JR C,L92A
CALL L3E08
LD (HL),#0
CALL L3E11
LD (HL),#83
LD A,#80
LD (L5CCD),A
POP HL
RET

[хомяк погрыз]

RST #38
RST #38
LD A,(L5CF6)
PUSH BC
LD BC,L7FBA
IN C,(C)
CP #1
JR Z,LA16
JR NC,LA1A
BIT 7,C
JR NZ,LA2D
JR LA1E
LA16 BIT 6,C
JR NZ,LA2D
LA1A CP #4
JR NC,LA2D
LA1E POP BC
LD D,C
PUSH BC
LD C,#2 ;позиционирование
CALL BIOS ;на логический трек
DEFB #81
POP BC
JP C,L3EE7
POP HL
RET

LA2D POP BC
JP L1FEB
LD A,(L5CF6)
LD BC,L7FBA
IN C,(C)
CP #1
JR Z,LA45
JR NC,LA49
BIT 7,C
JR NZ,LA4F
JR LA4D
LA45 BIT 6,C
JR NZ,LA4F
LA49 CP #4
JR NC,LA4F
LA4D POP HL
RET

WBR Jason.

Powered by ScorpionZS256turbo+/SMUC/HDD'IDE130Mb/FDD'800/
/CMOS/Cache8k/Covox/ATkbd/Mouse/CDOS...




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

Похожие статьи:
Нововсти - О новых программах от белоруских программистов.
С миру по биту - раздел для будущих писем.
очередной Marazm - Зеркало.
Список BBS - Сетевые новости.
TREE NEWS - Новая версия программы для модемов CDOS.

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