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


тема: Scorp + #3D13 = ?



от: Mihail Zharov
кому: Alexandr Khavzin
дата: 20 Nov 2001

Привет, Alexandr!

В Понедельник, 19 Hоября 2001, в 00:54:01,
Alexandr Khavzin -> Eugene Palenock.

AK>>> Возникла проблема с драйвером дисковода.
AK>>> В Скорпе надо устанавливать переменные #5CC8-#5CCB,
EP>> Зачем их устанавливать ? Они сами устанавливаются.
EP>> Используй функции 1 и 18 через call 3d13h
AK> С этим тоже не всё ладно:
AK> при работе 18-й функции бейсик область не смещается, а
AK> просто затирается 8-м сектором
AK> (через драйвер, который #3d13:)

Кривой драйвер.
Давай его сюда. Изнасилуем.;)

AK> Обошел это используя процедуры ПЗУ 48 для сдвига
AK> бейсик области.

Борьба со следствием, а лучше убить причину...

AK> Hо ведь ТР-ДОС сама должна это делать.

При вызове п/п #18 через #3д13?
Должна говоришь? И много кто тебе должен? ;)))
Посмотри хоть доки на тыр-дос...

;#18/#3д13 - 1029
;ll1021 - Загрузка в буфер сектора 8 дорожки 0.
; (23820) - установлено.

call 10570 ;создание буфера, если его нет.
ld de,8 ;дорожка 0, сектор 8.
jr 1010 ;загрузка сектора в буфер.

;ll1029 - Hастройка на диск.

call 1021 ;чтение в буфер сектора 8 дорожки 0.
ld a,(24076) ;взяли байт-индификатор типа диска.
cp 16 ;тр-дос?
jr z,1045 ;да - установка переменной дисковода.
ld hl,10722 ;адрес сообщения "DISC ERROR"
rst 24 ;печать сообщения.
jr 960 ;завершение - выход.

;23820 - флаг наличия буфера: 0 - есть, иначе - нет.

Вывод: при вызове #18/#3д13, переменная в (23820) должна быть
установленна не в 0.

У тебя "... затирается 8-м секторм..." - значит при вызове
#18/#3д13 в переменной (23820) находится _почему-то_ 0, хотя
буфера нету...

Для _цепочки_ #01/3д13: #18/#3д13
смотри вызов #01/#3д13... что она(п/п) там делает с (23820)...

;#01/#3д13 - 15819
;ll15819 -

╒═════════════════< Begin file: tr-dasm .WRD >═════════════════╕
────────────────────────────────────────────────────────────────
Адрес 15816. Выбор дисковода, определенного по умолчанию. Вход:
можно установить время перемещения головки и режим дисковода
согласно описанию команды #01. Выход: эти переменные могут быть
изменены согласно этому описанию. Используется также с адресов:
15819 - выбор дисковода. Hомер задайте в рег. A, остальное как и
для предыдущей подпрограммы.
15869 - задержка в 725779 тактов.
15871 - задержка любой нужной длительности. В рег. A установите
число, определяющее длительность задержки.

15816 LD A,(23833) ;берем номер дисковода по умолчанию
15819 LD (23798),A ;установка номера выбранного дисковода
LD HL,23830 ;выбор дисковода
LD C,A
LD A,60
OR C
OUT (255),A
LD (HL),A
CALL 15880 ;берем время перемещения головки дисковода
AND 128 ;бит 7 выключен ?
JR Z,15866 ;если да, то инициализацию не проводим
CALL 15789 ;проверка наличия диска в дисководе
CALL 15894 ;определение времени перемещения головки
CALL 15889 ;берем тип дисковода
CP 255 ;в этой переменной 255 ?
JR Z,15866 ;если да, то не определяем его
PUSH HL ;сохраняем адрес переменной с типом дисковода
CALL 8138 ;определение количества дорожек дисковода
POP HL ;восстановление адреса переменной типа
CP 80 ;установка этой переменной
LD A,0
JR NZ,15865
LD A,128
15865 LD (HL),A

Внимание, ошибка!!! Hе проверяется количество сторон дисковода и
предполагается, что он односторонний.

15866 CALL 7734 ;проверка индексной области диска
15869 LD A,0 ;задержка в 725779 тактов
15871 LD C,255
15873 DEC C
JR NZ,15873
DEC A
JR NZ,15871
RET ;возврат
────────────────────────────────────────────────────────────────
╘═════════════════< End file: tr-dasm .WRD >═══════════════════╛

AK> Проблема в драйвере?

Да.

AK>>> иначе не работает инициализация дисководов (через
AK>>> драйвер).
EP>> Через какой драйвер ?
AK> Тот самый, см. выше.

Где? Где сам драйвер..?
Или так и будем гадать на кофейной гуще, почему у тебя там
#3д13 глючит... ;)))


Приятных коNNектов, Alexandr.

от: Alexandr Khavzin
кому: Mihail Zharov
дата: 21 Nov 2001
Приветствую тебя, Mihail

Как-то Вторник 20 Ноябрь 2001 в 19:08:45 мылил
Mihail Zharov к Alexandr Khavzin на тему Scorp + #3D13 = ?

EP>>> Используй функции 1 и 18 через call 3d13h
AK>> С этим тоже не всё ладно:
AK>> при работе 18-й функции бейсик область не смещается, а
AK>> просто затирается 8-м сектором
AK>> (через драйвер, который #3d13:)

MZ> Кривой драйвер.
MZ> Давай его сюда. Изнасилуем.;)
Даю.

[скип]

MZ> ;23820 - флаг наличия буфера: 0 - есть, иначе - нет.

MZ> Вывод: при вызове #18/#3д13, переменная в (23820) должна
MZ> быть установленна не в 0.

MZ> У тебя "... затирается 8-м секторм..." - значит при вызове
MZ> #18/#3д13 в переменной (23820) находится _почему-то_ 0,
MZ> хотя буфера нету...
У меня оно установлено в #ff. Hо драйверу пофиг.
По идее можно изменить адрес буфера сектора но ТР-ДОС устанавливает его сама.

MZ> Для _цепочки_ #01/3д13: #18/#3д13
MZ> смотри вызов #01/#3д13... что она(п/п) там делает с
MZ> (23820)...
У меня на входе #FF и на выходе #FF.

MZ> Где? Где сам драйвер..?
MZ> Или так и будем гадать на кофейной гуще, почему у тебя там
MZ> #3д13 глючит... ;)))

═══════════════════════════ 3d13 .C ════════════════════════

DOSER

;вход: C-код операции (5/6)
; HL,DE,B-параметры
;выход: (23823),A,BC-код ошибки

DI

LD (23836),SP
LD (STK+2),SP;сохранили SP

CALL #3D13 ;в TR-DOS
STK DI ;выход из драйвера
LD SP,0
LD BC,(23823)
LD B,0 ;в BC,A-код ошибки
LD A,C
RET ;выход

PDE DW0
PHL DW0

;программа перехвата ошибок TR-DOS

OBR_ERR LD (PDE),DE
LD (PHL),HL
LD E,A
LD A,(23823)
AND A
JP NZ,NODSK ;нет диска
LD A,E
POP DE
LD HL,8020
AND A
SBC HL,DE
JR Z,PRBREAK ;проверка BREAK
LD HL,#028E
AND A
SBC HL,DE
JR Z,OPRKEY ;опрашивается клава
LD HL,16
AND A
SBC HL,DE
JR Z,PRRST16 ;что-то печатается
TODOS LD DE,(PDE)
LD HL,(PHL)
RET ;возврат в TR-DOS

PRBREAK CALL 8020 ;программа опроса
;"BREAK". выход
;scf-не нажата
JP C,TODOS
LD A,12
ERR LD (23823),A
JP STK
NODSK LD A,6
JR ERR

BYTE DB0 ;в случае DISK ERROR
;в нем "D",READ ONLY
;-в нем "R"

FLAG DB0 ;если<>0,то уже была
;ошибка

;программа проверки ошибки
;при вызове 15635 с C=5/6 может печататься
;только "DISK ERROR" или "READ ONLY" (мы
;уже перехватили "NO DISK". Определяем
;ошибку по печатаемому байту: "D" - DISK
;ERROR, "R" - READ ONLY.

PRRST16 LD A,(FLAG)
AND A
JP NZ,TODOS
CP "D"
JR Z,DISKERR
CP "R"
JR Z,READONL
JP TODOS
DISKERR LD (BYTE),A
DERR LD A,255
LD (FLAG),A
JP TODOS
READONL LD (BYTE),A
JR DERR

;ПРОГРАММА ОПРОСА КЛАВИАТУРЫ
;запрос возникает после печати сообщений
;DISK ERROR,READ ONLY(RETRY,ABORT,IGNORE)
;мы уже знаем, какая ошибка (из BYTE),
;поэтому печатаем сообщение и опрашиваем
;клавиатуру. Адрес программы печати и
;опроса берется из переменной (ADRES).
;Можете изменить ее (на выходе в A должен
;быть код: R-RETRY,A-ABORT,I-IGNORE.


OPRKEY LD HL,(DOSKEYS)
LD DE,OPRK1
PUSH DE
JP (HL)
OPRK1 CP "A" ;ответ "ABORT" ?
JR Z,ABORT ;если да,то переход
POP DE
POP DE ;восстанавливаем стек
LD HL,4199 ;адрес в ПЗУ TR-DOS
PUSH HL
JP 15663
ABORT LD A,7 ;код ошибки

JR DERR
DOSKEYS DOS_ERR


══════════════════════════════════════════════════════════════

будем копать?

Alexandr

[ZX]




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

Похожие статьи:
Demoscene - Chaos Constructions 2004 глазами Атаришника Drx из Германии: "Художник ты или музыкант, но без кодера ты никто?"
Игрушки - От редакции: 2017-й год вышел очень богатым на события.
Новые лица - "Exult и все, все, все" не очень известная группа из Петрозаводска.
Сегодня в номере - содержание журнала.
"Козеl" - "Лечево в коzLе-клубе г.Челяба"

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