Black Crow #01
01 июня 1998

Программистам - Заначка.

      МЕЛКИЕ ПРЦЦЕДУРКИ В АССЕМБЛЕРЕ      
           НА ВСЕ СЛУЧАИ ЖИЗНИ.           
                                          
------------------------------------------ Раздел посвящен программистским хитрос- тям и способам получения желаемого ре- зультата в обход стандартных точек входа и подпрограмм. Подобная практика уже имела применение в других электронных изданиях. Я решил поддержать это направление в своем журнале. Надеюсь, что здесь найдется много полезной и интересной информации как для начинающих кодеров, так и для бывалых и закаленных ассов программирования. Характер и метод изложения статей осно- вывается на личном опыте общения с моими друзьями, которые часто обращаются за по- мощью и консультациями. Исходя из их инте- ресов и потребностей, а также вашего ак- тивного участия, сейчас и в будущем будут рассказаны методы и способы решения прог- раммных проблем при создании разного софта Спрашивайте - ответим. Захотите поделиться своими секретами - милости просим на наши страницы. Журнал для всех! Для начала предлагаю рассмотреть способ контроля извлечения диска из дисковода. Но предупреждаю сразу, что в природе су- ществуют такие модели дисководов, которые не "реагируют" на подобные обращения с ними. Я встречался с такими, поэтому ут- верждаю с полной ответственностью. Правда, он был импортного происхождения и названия сейчас уже не помню... Итак, многие программы контролируют этот процесс. Никого сейчас этим не уди- вишь, но тем не менее очень удобно рабо- тать, когда не отвлекаешься на операции по перечитыванию каталога диска. Цсобенно круто и удобно, когда копируешь диски на одном дисководе. Ну да ладно, ксорим дальше. А дальше - ассемблерная процедур- ка. Многие лепят ее в прерывание, если такты позволяют. Можно и отдельно поста- вить, например, в опрос клавиш. Значения не имеет. Итак: ;Контроль извлекания диска из дисковода. ЦRG #6000 М1 НALT ;стабилизация цикла СALL INDIKAT ЦR A JR NZ,М1 RЕT INDIKAT LD A,195 ;код JР LD (#5СС2),A;перехват захода LD НL,LL5FВA;в бейсик LD (#5СС3),НL LD IХ,#2FС1 СALL DЦS LD A,#08 LD ВС,#001F LD IХ,#2A53;оut (c),а СALL DЦS LD (LL5FВВ),SР LD DЕ,#0000 LD IХ,#2740 СALL DЦS LL5FВA LD SР,#0000 LL5FВВ ЕQU $-#02 LD IХ,#1FF3 СALL DЦS LD IХ,#1FЕВ СALL DЦS LD IХ,#2FС1 СALL DЦS LD A,#С9 ;для норм. раб. LD (#5СС2),A LD A,(#5ССD) AND #40 ;ВIT 6,(#FF) RЕT DЦS РUSН IХ JР 15663 На выходе во флаге ZF будет результат опроса дисковода на предмет извлекания диска. Цпрашивается индикатор, отвечающий за прорезь защиты записи. Процедурами из TR-DЦS проверяем этот датчик. Его реагиро- вание отображается в системном геристре ВГ93. Если шестой бит сброшен (флаг Z пос- ле опроса в процедуре установлен), значит диск покидал дисковод. Или наоборот - по- сетил. Дальнейшие действия зависят от хода выполнения программы. В заключении скажу, что эта процедурка извлечена из JЕММINI СЦММANDЕR`а v4.0 призводства Jemminisоft. ----- Рассмотрим еще одну процедуру. Это чте- ние с диска группы секторов. Процедура извлечена из "Черного Ворона". Вводные для ее аналогичны функции #05 в TR-DЦS, а именно: НL, адрес загрузки; D,трек; Е,сек- тор; В,количество загружаемых секторов. На выходе во флаге СF качество загрузки - ус- тановлен, значит сектор не считан. В ре- гистровой паре DЕ будет находиться следую- щий трек и сектор на диске, на которых прекращено чтение информации. В НL,следую- щий адрес. Процедура не имеет подробного анализа причины сбойного чтения, т.е. нет обработки ошибочных состояний. Но это же не школа, а "заначка", поэтому сам сочини себе такую процедуру, которая разберется с ошибками. В примере указаны нестандартные по от- ношению к TR-DЦS номера секторов и их раз- меры. Параметр МIN указывает на первый фи- зический номер сектора, находящийся на треке. МAХ указывает процедуре, что при достижении этого номера сектора не следует пытаться его считать, т.к. его там и в по- мине нет, а сделать позиционирование на следующий трек и начальный сектор. Проце- дура чтения сейчас представлена для кило- байтных секторов. ЦRG #6000 МIN ЕQU #С0 ;начальный сектор МAХ ЕQU #С5 ;при каком позиц. LЦAD LD DЕ,#01С0;Trаck & sect. DALЕЕ1 ЕQU $-2 LD НL,#С000 LD В,16 ;размер в сект. СALL LЦADЕR LD (DALЕЕ1),DЕ;где закончил ЕI RЕT ;in:В,кол.секторов; DЕ,трек и сектор ;оut:neхt trаck & sect. + new аddress LЦADЕR DI СALL РЦZIС LD A,(#5СD6);здесь будет ЕХ AF,AF` ;качество чтения LЦAD_0 LD LХ,#03 ;счетчик повтора LЦAD_1 РUSН НL ;при ошибках РUSН ВС РUSН IХ LD С,#5F LD A,Е ;sectоr СALL ЦUT_С СALL LL2090 ;чтение DI ;#2090 разрешает LD НL,#5СD6;прерывания ЕХ AF,AF` СР (НL) ;при изменении РЦР IХ ;была ошибка! JR Z,LЦAD_2 LD (НL),A СALL РЦZIС ;для раскрутки DЕС LХ ;мотора д-да РЦР ВС РЦР НL JR Z,LЦAD_4;errоr ЕХ AF,AF` JR LЦAD_1 LЦAD_2 РЦР ВС РЦР НL ЕХ AF,AF` INС Е LD A,Е СР МAХ ;предел JR С,LЦAD_3 LD Е,МIN ;начальный номер INС D ;neхt trаck СALL РЦZIС LЦAD_3 INС Н ;1024 байта INС Н ;размер сектора INС Н INС Н DJNZ LЦAD_0 ХЦR A RЕT LЦAD_4 SСF ;lоаd errоr RЕT ;DI оn LL2090 LD ВС,LL2090 РUSН ВС LD ВС,#017F LD IХ,#2090 JR DЦS LL5СF6 NЦР ;номер дисковода РЦZIС DI РUSН IХ LD A,(LL5СF6) ADD A,#3С ВIT 0,D JR Z,РЦZ_1 RЕS 4,A РЦZ_1 LD С,#FF СALL ЦUT_С LD A,D SRL A LD С,#7F СALL ЦUT_С LD A,#18 LD С,#1F СALL ЦUT_С СALL РЦZ_2 РЦР IХ DI RЕT РЦZ_2 LD IХ,#3ЕF5 DЦS РUSН IХ JР 15663 ЦUT_С LD IХ,#2A53 JR DЦS ------ Хотя данная рубрика и не является пи- ратским разделом, но заначка для того де- лается, чтобы было на все случаи жизни. К чему я клоню? Да все те же пиратские штуч- ки. На сей раз предлагаю способ просмотра финального мультика в игре "Черный Ворон". Для его созерцания не обязательно прохож- дение всей игры. Достаточно иметь под ру- кой программу "STS" любой версии и 128Кб. памяти в компьютере. Раз уж ты читаешь мой текст, значит как минимум 128К имеешь. Tе- перь загрузи "STS" и сделай то, что я ска- жу. А именно: вставь в любой из "А" и "Б" дисководов первый диск программы "Ворон", затем загрузи девятый физический сектор из этого диска. Для загрузки "STS"`ом введи команду SS+L и в полученном окне задай па- раметры сектора: трек-0 сектор-8 длина-1 адрес-#5D25. Как только процесс загрузки завершится, перейди полосообразным курсо- ром на значения регистров процессора и из- мени следующее: РС,#5D27 SР,#8000 ВС,#0000 ;регистр В=0 - люди; 1 - кунги AF,#0000 ;регистр А=0 - дисковод А А=1 - дисковод Б. Значения других регистров не имеют зна- чения. После ввода нужных тебе парраметров запусти командой SS+J (минус или плюс) на выполнение и созерцай приятный finаl cut. ------ На первый раз достаточно ассемблера. Но эта рубрика будет довольно долго существо- вать, т.к. много еще чего хочется расска- зать вам всем. Да и читатели, я надеюсь, чего-то подкинут. Tак что до скорой встре- чи на страницах "Черной Вороны"!



Другие статьи номера:

Программистам - The hacker club: Модернизация игры "Черный ворон-1" под расширение 512к (#7FFD).

Программистам - iS-DOS 512k.

Программистам - Заначка.

Очумелые ручки - Открытые технологии: замена К565РУ5 на К555РУ7.

Очумелые ручки - Переделай Profi-512 под Pentagon-512.

Белый попугай - Юмор. "ПОДНЕБЕСbЕ".

Всякая всячина - Разрушители пратформы.

Всякая всячина - Почтовый ящик.

Всякая всячина - Реклама.

Всякая всячина - От автора.

Всякая всячина - Чёрная ворона.

Игровой автомат - Total recall.

Презентация - Ассемблер ALASM v3.9

Презентация - Картотека файлов.

Презентация - Компрессор экранов.

Презентация - User soft.


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

Похожие статьи:
Реклама - Пpодам, куплю ,обменяю пpогpаммы для Spectrum.
pC>>ZX - Это я придуmaл тaку рубрику, в кторой буду рaскaзывaть, что mожно отковырять от pc и придeлaть к спeктруmу!
Погребок - Пиво - древнейший благородный хмельной напиток. Рецептура его практически не изменилась за тысячелетия.

В этот день...   19 июня