╔══════════════════════════════════════╗
║Раздел : Tr-Dos ║
║Текст : Ж.Юрий ║
║Music : IRONMAN ║
║Информация : Dr.Serg, Mr.Beeper ║
╚══════════════════════════════════════╝
"Сегодня мы поговорим
об одном из глюков TR-DOS"
────────────────────────────────────────
Так было написано в журнале
"ZX-FORMAT" , про глюк, о котором я
сейчас собираюсь Вам рассказать
подробней.
В этом журнале был описан случай,
когда при включении компьютера, головка
дисковода направлялась к 159 trk и пыта-
лась продвинуться дальше. Объяснение они
давали такое: (приблизительно)
- Товарищи юзеры! Проблема вовсе не в
Вашем контроллере, а в вашей ПЗУ. Так
что меняйте ПЗУ и все будет работать
как полагается.
Хотел бы я увидеть ихние рожи, когда
эта "новая ПЗУ" поработает около недель-
ки. Да, когда поменяешь ПЗУ'шку все как
будто-бы работает прекрасно, но через
несколько дней, все происходит как в пер-
вый раз.
Не хочу Вас огорчать, но вся проблема
не в ПЗУ, а в вашем контроллере дисково-
да !!! Это уже проверено и протестиро-
вано несколько раз. Чаще всего этот
"глюк" встречается в компьютерах модели
"Ленинград2", "Харьков" и им подобным,
где стоит контроллер без ПЗУ, а вместо
обычной 128к, стоит 512к.
Так что товарищи ИЗДАТЕЛИ проверяйте
на достоверность свои материалы, прежде
чем выпускать их в свет !!!
p.s. Sorry guys!
________________________________________
Хочу я написать вот еще о чем.
Многие начинающие работать на ассемблере
программисты наверняка заметили, что
загрузка блока секторов с точкой входа
15635 (#3D13 ненавижу HEX - систему!)
останавливается при нажатии клавиши
BREAK. Чтобы этого избежать, достаточно
вначале программы поставить вот такие
две строчки:
LD HL,51697
LD (23746),HL
и все! На этом все мучения с клавишей
BREAK будут окончены - она просто "перес-
танет существовать".
Использование вышеизложенного метода
вместе с загрузкой через #3D13 - лучший
загрузчик, который можно только приду-
мать: во - первых, он краток, а во вторых
- работает на всех компьютерах, назависи-
мо от версии TR-DOS. Этим методом поль-
зуются и DREAM MAKERS SOFTWARE, и MAX
IWAMOTO.
И еще: Дризья ! Учитесь экономить па-
мять: зачем писать:
LD B,LEN
LD C,5
ведь вместо этого можно написать:
LD BC,LEN*256+5
и ассемблер поймет и один байт памяти
сэкономите ("копейка - рубль бережет").
Господа программисты! Сжимайте, пожалуй
ста, свои программные продукты. Существу-
ет же такая бесподобная вещь, как LZ/PACK
или MS_PACK вобщем их много ...
Если у Вас есть подобные материалы,
присылайте их к нам в редакцию, и мы
обязательно опубликуем их.
А теперь переходим к главному.
________________________________________
Сегодня в разделе Tr-Dos аж две проце-
дуры, которые пригодятся Вам во многих
случяях жизни, а именно :
1. ОПРОС ВГ 93 НА ОТСУТСТВИЕ ДИСКА!
2. ПРОЦЕДУРА ПОЗИЦИОНИРОВАНИЯ ГОЛОВКИ!
Две эти процедуры любезно предостав-
лены великим CODER'ом, под кликухой
Dr.Serg. В последующих номерах этот
раздел будет вести опять же он, а в
приложении есть его Remix игры
"SPACE CR." под MOUSE !!!
Так что прошу любить и жаловать.
* * *
Чтобы не усложнять Вам жизнь, на диске
есть эти процедуры в формате ZX-ASM 3
────────────────────────────────────────
Опрос "ВГ93" на отсутствие диска!
Coded and copyright by Dr.SERG,
(special for magazine PolyForm)
ORG #8000
DI
CALL ConDisk
LD HL,met3
LD (HL),A
met2 EI
HALT:DI
CALL ConDisk
CP (HL)
JR NZ,met1
LD A,#7f
IN A,(#fe)
BIT 0,A
JR NZ,met2
met1 DS 3
RET
met3 DB 0
ConDisk PUSH IY
PUSH IX
PUSH HL
PUSH DE
PUSH BC
LD (ConDisk1+1),SP
;Установка по адд.#5CC2:3ConDisk1
LD A,#c3
LD (#5cc2),A
LD HL,ConDisk1
LD (#5cc3),HL
;Команда "Принудительное прерывание"
LD IX,#2FC1
CALL LL7846
;Команда "Восстановление"
LD A,#08
LD BC,#001F
LD IX,#2A53
CALL LL7846
;Чтение регистров состояний ВГ93
LD DE,#0000
LD IX,#2740
CALL LL7846
ConDisk1 LD SP,0
XOR A
;сброс ВГ93
LD IX,#1FF3
CALL LL7846
;восстановление системного регистра ВГ93
LD IX,#1FEB
CALL LL7846
;Команда "Принудительное прерывание"
LD IX,#2FC1
CALL LL7846
;Установка по адресу - #5CC2:RET
LD A,#c9
LD (#5cc2),A
LD A,(#5CCD)
AND #40
POP BC
POP DE
POP HL
POP IX
POP IY
RET
LL7846 PUSH IX
JP #3D2F
Процедура позиционирования головки!
Coded and copyright by Dr.SERG,
(special for magazine PolyForm)
ВВХОД :w- ном.трека 0-159
:A=0 проверка положения 1══╗
(0001 1х00)
:A=255 не проверять 0══╝
ВЫХОД:A=0 O.K.
A<>0 Error,
BIT 7,a=1 ком.не приинята
BIT 4,a=1 ош-ка позиционирования
BIT 0,a=1 контр.не готов к приему
изм.ет IX,AF
Служебный регистр => (ErrWG)
При старте двигателя делается пауза
опред.константой => (DrPause)
ORG 25000
LD B,0 ;Trk
Posic PUSH BC
LD IX,posicC
AND A
SET 2,(IX+1)
JR Z,posic3
RES 2,(ix+1)
posic3 LD IX,posicex
PUSH IX
И;установка side
LD A,B
SRL A
LD B,A
LD IX,#1feb
JR NC,posic1
LD IX,#1ff6
posic1 CALL Dos2
LD IX,#3c30
CALL Dos2
BIT 0,A
jr z,posic4
;ВГ не готова.прерывание каманды
LD A,%11010000
LD C,#1f
LD IX,#2a53
JR posic1
;проверка на вращение двигателя
;и модификация конст.задержки
posic4 LD IX,1
BIT 7,A
JR Z,posic5
LD IX,(DrPause)
posic5 LD (posicp+2),IX
LD A,B
LD C,#7f
CALL Dos1 ;установка номер trk.
posicC LD A,%00011100;
;bit 2-проверка позиц..
LD C,#1f
CALL Dos1
CALL Dos1 ;поиск дорожки
LD IX,#3c30; in a,(#1f)
posic2 CALL Dos2
BIT 0,A; идет выполнение команды
JP NZ,posic2
BIT 7,A ;Аварийный выход
RET NZ ;Дисковод стоит!!
BIT 4,A:RET NZ;ошибка поиска
BIT 3,A:RET NZ;ошибка в контрол.
Ц;коде(при CHECK)
LD (ErrWG),A
И;пауза,если был старт двигателя
posicp LD IX,0
posic6 DEC IX
LD A,XL
OR XH
JR NZ,posic6
POP BC:RET
posicex LD (ErrWG),a
POP BC
RET
────────────────────────────────────────
; пп перехода в TR.DOS
; по 2A53: OUT (BC),A:RET
Dos1 LD IX,#2a53; out (c),a:ret
Dos2 PUSH IX
JP #3d2f
ErrWG DB 0
DrPause DW #A000
Внимание !!!
Эти процедуры не работают на ПЗУ с вер-
сией TR-DOS 5.03.
При использовании этих процедур в собст-
венных программах, делайте ссылку на
автора.
На сегодня все, ждем ваших писем с пред-
ложениями.
________________________________________