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]




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

Похожие статьи:
Cyberpunk - история Киберпанка в 90х годах.
Разыскивается - From: UHO To: All
Энциклопедия - Испанософтография (софтография всех испанских спектрумовских фирм).
Demoparty - КАСик из Sinclair Club организует KIDSOFT'2004.
ZIP - программы в приложении (файл city50.Z) находятся в запакованном виде.

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