Amazing
#01
29 сентября 1997 |
|
TR-DOS - отключение клавиши Break, опрос ВГ 93 на отсутствие диска, процедура позиционирование головки дисковода.
╔══════════════════════════════════════╗ ║Раздел : 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. При использовании этих процедур в собст- венных программах, делайте ссылку на автора. На сегодня все, ждем ваших писем с пред- ложениями. ________________________________________
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября